HDU 5606 tree 并查集
2016-01-02 21:30
411 查看
tree
把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小.开一个并查集,每次读到边权是0的边就合并.最后Ansi=size[findset(i)],size表示每个并查集根的size
Ans_i=size[findset(i)],sizeAnsi=size[findset(i)],size表示每个并查集根的sizesize.
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cstdlib> #include<cmath> #include<cstdlib> #include<vector> #include<queue> using namespace std; typedef long long LL; const int maxn=100000+5; int a[maxn]; int fa[maxn]; int find(int x) { if(x==fa[x])return x; return fa[x]=find(fa[x]); } int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); memset(a,0,sizeof(a)); for(int i=1; i<=n; ++i) fa[i]=i; for(int i=1; i<n; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); if(w==0) { int fx=find(u); int fy=find(v); if(fx==fy)continue; fa[fy]=fx; } } for(int i=1; i<=n; i++) { int f=find(i); a[f]++; } int ans=0; for(int i=1; i<=n; i++) { ans=(ans^a[fa[i]]); } printf("%d\n",ans); } return 0; }
View Code
相关文章推荐
- 创建Hibernate工程
- 《C语言及程序设计初步》第26讲实践项目
- bestcoder #68 A(并查集)
- web servies
- 多线程
- python 代码片段
- 第八届河南省赛G.Interference Signal(dp)
- HDU 3968 Angry Birds Again(计算几何)
- startService与bindService的区别
- epoll:EPOLLLT模式下的正确读写方式
- 16年1月2日记录:新站收录的问题探讨与博客群的维护问题探讨
- hdoj1811变形课【dfs】
- iOS中viewController的三种创建方式
- Eclipse中搭建Apache Tomcat7源码调试环境
- Eclipse中搭建Apache Tomcat7源码调试环境
- Maven deploy时报Fatal error compiling: tools.jar not found错误的问题处理(转载)
- node.js 实现高并发大流量处理网站
- python实现onvif协议-2
- Eclipse中搭建Apache Tomcat7源码调试环境
- 【随便说说】新的一年