• hdu 5606 tree(并查集)


    Problem Description
    There is a tree(the tree is a connected graph which contains n points and n1 edges),the points are labeled from 1 to n,which edge has a weight from 0 to 1,for every point i[1,n],you should find the number of the points which are closest to it,the clostest points can contain i itself.
     
    Input
    the first line contains a number T,means T test cases.
    for each test case,the first line is a nubmer n,means the number of the points,next n-1 lines,each line contains three numbers u,v,w,which shows an edge and its weight.
    T50,n105,u,v[1,n],w[0,1]
     
    Output
    for each test case,you need to print the answer to each point.
    in consideration of the large output,imagine ansi is the answer to point i,you only need to output,ans1 xor ans2 xor ans3.. ansn.
     
    Sample Input
    1 3 1 2 0 2 3 1
     
    Sample Output
    1 in the sample. $ans_1=2$ $ans_2=2$ $ans_3=1$ $2~xor~2~xor~1=1$,so you need to output 1.
     


     1 #pragma comment(linker, "/STACK:1024000000,1024000000")
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<math.h>
     7 #include<algorithm>
     8 #include<queue>
     9 #include<set>
    10 #include<bitset>
    11 #include<map>
    12 #include<vector>
    13 #include<stdlib.h>
    14 using namespace std;
    15 #define ll long long
    16 #define eps 1e-10
    17 #define MOD 1000000007
    18 #define N 100006
    19 #define inf 1e12
    20 int n;
    21 int fa[N];
    22 int num[N];
    23 void init(){
    24     for(int i=0;i<N;i++){
    25         fa[i]=i;
    26     }
    27 }
    28 int find(int x){
    29     return fa[x]==x?x:fa[x]=find(fa[x]);
    30 }
    31 void merge(int x,int y){
    32     int root1=find(x);
    33     int root2=find(y);
    34     if(root1==root2) return;
    35     fa[root1]=root2;
    36 }
    37 int main()
    38 {
    39     int t;
    40     scanf("%d",&t);
    41     while(t--){
    42         init();
    43         scanf("%d",&n);
    44         for(int i=0;i<n-1;i++){
    45             int a,b,c;
    46             scanf("%d%d%d",&a,&b,&c);
    47             if(c==0){
    48                 merge(a,b);
    49             }
    50         }
    51         
    52         memset(num,0,sizeof(num));
    53         for(int i=1;i<=n;i++){
    54             int r=find(i);
    55             num[r]++;
    56         }
    57         int ans=0;
    58         for(int i=1;i<=n;i++){
    59             ans=(ans^num[find(i)]);
    60         }
    61         printf("%d
    ",ans);
    62     }
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    一、汇编基础知识
    PHP RabbitMQ消息队列演示代码
    PHP CentOS下安装PHP及部署ThinkPHP
    MySQL CentOS下安装MySQL
    ThinkPHP 对接支付宝支付接口
    ThinkPHP 获取当前页面完整的URL地址
    前端 Validform.js属性,用法及Ajax提交简介
    PHP 配置Xdebug调试工具
    ThinkPHP 原生分页功能改进,更好用更美观
    ThinkPHP 使用第三方phpmailer库发送邮件
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5165013.html
Copyright © 2020-2023  润新知