标签:
Description
Input
Output
Sample Input
2 3 3 1 2 1 2 3 2 3 1 3 4 4 1 2 2 2 3 2 3 4 2 4 1 2
Sample Output
3 Not Unique!
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int father[111],n,m,first; struct node { int u,v,w; int used; int equal; int del; } a[11111]; bool cmp(node x,node y) { if(x.w<y.w) return true; return false; } int find(int x) { int r=x; while(father[r]!=r) r=father[r]; int i=x,j; while(i!=r) { j=father[i]; father[i]=r; i=j; } return r; } int prime() { int i,j,k,sum,num; sum=0;num=0; for(i=1;i<=n;i++) father[i]=i; for(i=1;i<=m;i++) { if(a[i].del) continue; int fx=find(a[i].u); int fy=find(a[i].v); if(fx!=fy) { num++; father[fx]=fy; sum+=a[i].w; if(first) a[i].used=1; } if(num==n-1) break; } return sum; } int main() { int i,j,k,u,v,w,sum1,sum2; int t; scanf("%d",&t); while(t--) { sum1=sum2=0; memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w); } for(i=1;i<=m;i++) { for(j=i+1;j<=m;j++) { if(a[i].w==a[j].w) a[i].equal=1; } } sort(a+1,a+1+m,cmp); first=1; sum1=prime(); first=0; for(i=1;i<=m;i++) { if(a[i].used && a[i].equal) { a[i].del=1; sum2=prime(); if(sum1==sum2) { printf("Not Unique!\n"); break; } } } if(i==m+1) printf("%d\n",sum1); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 1679 The Unique MST(判断最小生成树_Kruskal)
标签:
原文地址:http://blog.csdn.net/h1021456873/article/details/47726707