题意:给你一个图,每条边权值0或1,问每个点周围最近的点有多少个?

思路:并查集找权值为0的点构成的连通块。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<math.h>
 5 #include<algorithm>
 6 #define clc(a,b) memset(a,b,sizeof(a))
 7 using namespace std;
 8 int pre[100010],a[100010];//标记根节点
 9 int find(int x)//查找根节点
10 {
11     int r=x;
12     while(pre[r]!=r)//返回根节点r
13         r=pre[r];
14     int i=x,j;
15     while(i!=r)//路径压缩
16     {
17         j=pre[i];//在改变上级之前用临时变量j记录下他的值
18         pre[i]=r;//把上级改为根节点
19         i=j;
20     }
21     return r;
22 }
23 void join(int x,int y)//判断x,y是否连通.如果已经连通,就不用管了;如果不连通,就把它们所在的连通分支合并起
24 {
25     int fx=find(x),fy=find(y);
26     if(fx!=fy) pre[fy]=fx;
27 }
28 int main()
29 {
30     //freopen("in.txt","r",stdin);
31     int t,n,x,y,z;
32     while(~scanf("%d",&t))
33     {
34         for(int i=0; i<t; i++)
35         {
36             clc(a,0);
37             scanf("%d",&n);
38             for(int i=1; i<=n; i++)
39             {
40                 pre[i]=i;
41             }
42             for(int i=1; i<n; i++)
43             {
44                 scanf("%d%d%d",&x,&y,&z);
45                 if(!z) join(x,y);
46             }
47             for(int i=1; i<=n; i++)
48             {
49                 a[find(i)]++;
50             }
51             long long ans=0;
52             for(int i=1; i<=n; i++)
53             {
54                 int p=a[find(i)];
55                 if(p) ans^=p;
56                 else ans^=1;
57             }
58             printf("%I64d\n",ans);
59         }
60     }
61     return 0;
62 }

View Code

转载于:https://www.cnblogs.com/ITUPC/p/5095308.html

BestCoder Round #68 (div.2) 1002 tree相关推荐

  1. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  2. BestCoder Round #66 (div.2) 1002

    GTW likes gt  Accepts: 132  Submissions: 772  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  3. BestCoder Round #78 (div.2)_B_ CA Loves GCD

    CA Loves GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) T ...

  4. HDU 5597 GTW likes function(规律+欧拉函数模板题)——BestCoder Round #66(div.1 div.2)

    GTW likes function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Oth ...

  5. Codeforces Round #316 (Div. 2) D. Tree Requests dfs序

    题目链接: 题目 D. Tree Requests time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 Rom ...

  6. BestCoder Round #81 (div.2) B Matrix

    B题...水题,记录当前行是由原矩阵哪行变来的. 1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> ...

  7. Codeforces Round #646 (Div. 2)E. Tree Shuffling 题解(dfs)

    题目链接 题目大意 给你一颗树,每一个节点有一个a[i],b[i],c[i]值,你要把b[i]变成c[i],b[i]和c[i]为[0,1],你操作的方法是,选择一个节点x,选择他的k个子树,然后进行交 ...

  8. (BestCoder Round #59 (div.1) B)简单DP

    (改编版,题意相同) Description 火神为了检验zone的力量,他决定单挑n个人. 由于火神训练时间有限,最多只有t分钟,所以他可以选择一部分人来单挑,由于有丽子的帮助,他得到了每个人特定的 ...

  9. BestCoder Round #78 (div.2)

    因为rating不够QAQ就报了Div2.. [CA Loves Stick] CA喜欢玩木棍. 有一天他获得了四根木棍,他想知道用这些木棍能不能拼成一个四边形. Sample Input 2 1 1 ...

最新文章

  1. pig脚本不需要后缀名(python tempfile模块生成pig脚本临时文件,执行)
  2. 导致网速变慢的安全隐患
  3. CVPR 2021接收结果出炉!录用1663篇,接受率显著提升,你的论文中了吗?(附论文下载)...
  4. oracle rac应急_ORACLE紧急情况检查应急预案
  5. 数据库 DB database SQL DBMS
  6. 遍历文件夹还原数据库SQL语句
  7. android ViewPager 图片浏览和保存图片
  8. javascript 运算符优先级
  9. 笨办法学 Python · 续 练习 32:扫描器
  10. 我跟 17 位顶级游戏策划人学到的 3 个产品方法论
  11. CCF201409-2 画图(100分)
  12. python regularexpress1
  13. python3.6实现的A星算法
  14. 影视剪辑,Pr视频剪辑软件自学,界面介绍与自定义
  15. 如何比较两个EXCEL 文件的不同(各个EXCEL版本的方法)
  16. 微信公众号文章的爬取(搜狗微信搜索)
  17. Kalman Fuzzy Actor-Critic Learning Automaton Algorithm for the Pursuit-Evasion Differential Game
  18. 计算机一级c云大,云南大学网红C位易主!新晋流量霸主竟然是……
  19. python大数据入门书籍推荐书目_python 大数据入门书籍
  20. Linux:chmod -R 777 *含义

热门文章

  1. Dosbox+Masm汇编语言
  2. Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值
  3. 2022-2028年中国汽车塑料行业市场深度分析及投资趋势预测报告
  4. 实现SSTab单个选项卡代码
  5. LeetCode简单题之公平的糖果交换
  6. 无人驾驶传感器融合技术
  7. h264和h265多维度区别
  8. 客快物流大数据项目(五十三):实时ETL模块开发准备
  9. 商城数据库表设计介绍
  10. java多线程(三)