Uva-11631- Dark roads

来源:互联网 发布:雄猫软件培训骗局 编辑:程序博客网 时间:2024/05/21 08:39

这个题就是求一个最小生成树

代码:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int maxn=200001;struct node{    int u;    int v;    int cost;    bool operator < (const node &a)const    {    return cost<a.cost;    }}a[maxn];int p[maxn];int n,m;int find(int x){    if(p[x]==x)    return x;    return p[x]=find(p[x]);}int main(){    while(scanf("%d%d",&n,&m)&&(n+m))    {    long long sum=0;    for(int i=0;i<m;i++)    {        scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].cost);        sum+=a[i].cost;    }    for(int i=0;i<=n;i++)        p[i]=i;    sort(a,a+m);    long long ans=0;    for(int i=0;i<m;i++)    {        int ita=find(a[i].u);        int itb=find(a[i].v);        if(ita!=itb)        {        ans+=a[i].cost;        p[ita]=itb;        }    }    printf("%lld\n",sum-ans);    }    return 0;}