首页 > 其他 > 详细

bestcoder #68 A(并查集)

时间:2016-01-02 22:26:48      阅读:198      评论:0      收藏:0      [点我收藏+]

每次都是在最后十几分钟才想出来。。并不能交了T_T

w是0的话merge(u,v)

ans[i]就是i所在集合的元素个数

#include"cstdio"
#include"queue"
#include"cmath"
#include"stack"
#include"iostream"
#include"algorithm"
#include"cstring"
#include"queue"
#include"map"
#include"vector"
#define ll long long

using namespace std;
const int MAXN = 100500;
const int MAXE = 200500;
const int INF = 0x3f3f3f;

int f[MAXN],sum[MAXN];

int fa(int x){
    return x==f[x]?x:f[x]=fa(f[x]);
}

void merge(int a,int b){
    a=fa(a);
    b=fa(b);
    f[a]=b;
}

int main(){
    //freopen("in.txt","r",stdin);
    int n,T;scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        for(int i=1;i<=n;i++) f[i]=i;
        memset(sum,0,sizeof(sum));
        for(int i=1;i<n;i++){
            int u,v,w;scanf("%d%d%d",&u,&v,&w);
            if(!w) merge(u,v);
        }
        for(int i=1;i<=n;i++) sum[fa(i)]++;
        int ans,flag=0;
        for(int i=1;i<=n;i++){
            if(flag) ans^=sum[fa(i)];
            else ans=sum[fa(i)],flag=1;
        }
        cout<<ans<<endl;
    }
    return 0;
}

 

bestcoder #68 A(并查集)

原文:http://www.cnblogs.com/luxiaoming/p/5095318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!