Poj 3723 Conscription -- 最大生成树(森林)

来源:互联网 发布:aim聊天软件申请 编辑:程序博客网 时间:2024/04/28 04:25
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;struct edge{int a,b;int d;}r[50010];int p[20010];int root(int x){if(p[x]==x)return p[x];return p[x] = root(p[x]);}void merge(int a,int b){a = root(a);b = root(b);p[a] = b;}bool cmp(edge a,edge b){return a.d>b.d;}int main(){int t;int girl,boy,n,ans;scanf("%d",&t);while(t--){scanf("%d%d%d",&girl,&boy,&n);for (int i = 0; i < n; i++){scanf("%d%d%d",&r[i].a,&r[i].b,&r[i].d);r[i].b += girl; }for (int i = 0; i < boy+girl; i++){p[i] = i;}sort(r,r+n,cmp);int minus = 0;for (int i = 0; i < n; i++){if(root(r[i].a) != root(r[i].b)){merge(r[i].a,r[i].b);minus += r[i].d; }}ans = 10000*(girl+boy);ans -= minus;printf("%d\n",ans);}return 0;}

原创粉丝点击