• HDU 1863 畅通project (最小生成树是否存在)


    题意 中文

    入门最小生成树  prim大法好

    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N = 105;
    int cost[N], mat[N][N], n, m, ans;
    
    void prim()
    {
        memset(cost, 0x3f, sizeof(cost));
        cost[1] = -1;
        int cur = 1, next = 0;
        for(int i = 1; i < n; ++i)
        {
            for(int j = 1; j <= n; ++j)
            {
                if(cost[j] == -1) continue;
                if(cost[j] > mat[cur][j]) cost[j] = mat[cur][j];
                if(cost[j] < cost[next]) next = j;
            }
            ans += cost[next], cost[cur = next] = -1, next = 0;
        }
    }
    
    int main()
    {
        int a, b, c;
        while(scanf("%d%d", &m, &n), m)
        {
            memset(mat, 0x3f, sizeof(mat));
            for(int i = 1; i <= m; ++i)
            {
                scanf("%d%d%d", &a, &b, &c);
                if(c < mat[a][b]) mat[a][b] = mat[b][a] = c;
            }
            ans = 0;
            prim();
            if(ans >= cost[0]) printf("?
    ");
            else printf("%d
    ", ans);
        }
        return 0;
    }
    

    畅通project



    Problem Description
    省政府“畅通project”的目标是使全省不论什么两个村庄间都能够实现公路交通(但不一定有直接的公路相连。仅仅要能间接通过公路可达就可以)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。

    现请你编敲代码。计算出全省畅通须要的最低成本。

     

    Input
    測试输入包括若干測试用例。每一个測试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N 
    行相应村庄间道路的成本,每行给出一对正整数,各自是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。

    为简单起见。村庄从1到M编号。当N为0时,所有输入结束,相应的结果不要输出。

     

    Output
    对每一个測试用例,在1行里输出全省畅通须要的最低成本。若统计数据不足以保证畅通。则输出“?”。
     

    Sample Input
    3 3 1 2 1 1 3 2 2 3 4 1 3 2 3 2 0 100
     

    Sample Output
    3 ?
     


  • 相关阅读:
    C++内存检测函数_CrtSetBreakAlloc()
    Detours 的配置
    浅析杀毒软件开发原理
    Sqlite3初学
    java拦截器、过滤器的区别
    sudo 设置无需密码
    Visual Studio 2012/2010/2008 远程调试
    jquery 随笔
    网页中显示xml,直接显示xml格式的文件
    centos7.2_x64安装mysql.tar.gz
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5073558.html
Copyright © 2020-2023  润新知