poj1703 并查集
2015-07-28 10:34
176 查看
输入是2个不在一起的人,可以用一个数组来保存和他矛盾的人。这样find的时候就find(hash[]);就可以;
#include<stdio.h> #include<string.h> int pa[100020],h[100020],n; void init() { for(int i=0;i<=n;i++) { pa[i]=i; h[i]=0; } } int find(int x) { if(x!=pa[x]) pa[x]=find(pa[x]); return pa[x]; } int main() { int i,j,t,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); getchar(); init(); char s; int a,b; for(i=0;i<m;i++) { scanf("%c %d %d",&s,&a,&b); getchar(); if(s=='D') { if(!h[a]) h[a]=b; else { int l1,l2; l1=find(h[a]); l2=find(b); pa[l1]=l2; } if(!h[b]) h[b]=a; else { int l1,l2; l1=find(h[b]); l2=find(a); pa[l1]=l2; } } else { /*if(n==2) { if(a!=b) printf("In different gangs.\n"); else printf("In the same gang.\n"); continue; }*/ int l1=find(a); int l2=find(b); int l3=find(h[b]); if(h[l1]==0||h[l2]==0) { printf("Not sure yet.\n"); continue; } if(l1==l2) printf("In the same gang.\n"); else if(l1==l3) { printf("In different gangs.\n"); } else printf("Not sure yet.\n"); } } } }
相关文章推荐
- Activity四种加载模式
- WEB站点性能优化实践(加载速度提升2s)
- C++ typedef用法小结 (※不能不看※)
- Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
- sqlserver用当前行减去前一行的数据的简单处理方法 -- 不使用循环
- 从Trie树(字典树)谈到后缀树
- 柯塔娜(Cortana):从科幻虚构到真实人生
- Apache Shiro 使用手册(二)Shiro 认证
- 关于Android加载图片机制分析
- CPU策略学习
- iOS开发-CoreMotion框架(加速计和陀螺仪)
- svn 图标所表示的意思
- 错误:‘xxxx’不能出现在常量表达式中
- 程序员,千万不要重写代码
- HDFS Trash 整理
- Unity3D在Windows的全屏和跨屏(双屏)方案
- Uva 11059 Maximum Product
- 合并 CentOS 6.5 的两个 DVD 作为本地 YUM 源
- 【转】实现Sqlite datediff日期时间相减的方法
- lambda的Func<>函数