zoukankan      html  css  js  c++  java
  • Gym


    标准的最小生成树,一点隐藏题意的意思都没有。题意就是一个人想在任意两个城市开车,路上没有加油的,每个城市都有。每条路会有花费,求能遍历所有城市需要的至少汽油有多少。这里讲下最下生成树和最短路径的区别:

    最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径。
    最短路径是从一点出发,到达目的地的路径最小。



    如图,最小生成树只要能扩展枝条到全部点就行了,并不是两点之间的最短。区别还是挺大的。

    对了,这题边的输入必须要用scanf!稠密图,联系上次最短路教训。。。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 100000+10;
    int f[maxn];
    int n,m,Max,cnt;
    
    
    struct edge{
        int u,v;
        int w;
    }e[maxn];
    
    
    bool cmp(edge a, edge b)
    {
        return a.w < b.w;
    }
    
    int find(int x)
    {
        return x == f[x] ? x : f[x] = find(f[x]);
    }
    
    
    int Kruskal()
    {
        int ans = 0;
        for(int i = 1; i <= n; i++) f[i] = i;
        sort(e,e+m,cmp);
    
        for(int i = 0; i < m; i++)
        {
            int u = find(e[i].u);
            int v = find(e[i].v);
    
            if(u != v)
            {
                f[v] = u;
                ans += e[i].w;
                cnt++;
                if(e[i].w>Max)
                    Max = e[i].w;
            }
            if(cnt==n-1||n==1)
                break;
        }
        return ans;
    }
    int main()
    {
    //    freopen("in.txt","r",stdin);
        int t;
        scanf("%d",&t);
        while(t--) {
            Max = -1;
            cnt = 0;
            memset(e,0,sizeof(e));
            scanf("%d%d",&n,&m);
            for(int i = 0; i < m; i++) {
                scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
            }
            int ans = Kruskal();
            printf("%d
    ",Max);
    
        }
        return 0;
    }



  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256612.html
Copyright © 2011-2022 走看看