Find them, Catch them

好久没有做并查集的题,竟然快把并查集忘完了。

题意:大致是有两个监狱,n个犯人,m次操作,每次操作可以是查询也可以是确定两个人是否在同一个监狱里。

思路:其实这题完全可能做出来,结果就是没做出来。理清思路还是很好想的,我们用一个并查集来把能够确定在同一监狱里的人放在一个集合里,用一个diff数组把确定不同监狱的两个犯人分别与对方不同监狱的犯人放在一个集合里,就是这么简单。

const int N=1e5+10;
int f[N],dif[N];
char s[5];
void init()
{
for(int i=0;i<N;i++) f[i]=i;
memset(dif,-1,sizeof(dif));
}
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
init();
int u,v;
while(m--)
{
scanf("%s%d%d",s,&u,&v);
if(s[0]=='A')
{
if(find(u)==find(v)) printf("In the same gang.\n");
else if(find(dif[u])==find(v)||find(dif[v])==find(u)) printf("In different gangs.\n");
else printf("Not sure yet.\n");
}
else
{
if(dif[u]==-1) dif[u]=v;
if(dif[v]==-1) dif[v]=u;
int uu=find(dif[u]),vv=find(dif[v]);
f[uu]=find(v);
f[vv]=find(u);
}
}
}
return 0;
}

最新文章

  1. DX9入门笔记1-D3D初始化
  2. Tactical Multiple Defense System 二分图
  3. Hanoi T note
  4. Ubuntu下解决bash 没有那个文件或目录的方法
  5. 【PL/SQL练习】复合变量: 可以一次传递多个值到变量中。
  6. lintcode:颜色分类
  7. wpf随笔
  8. Centos7安装杀毒软件ClamAV
  9. WordPress的SEO技术
  10. H264相关代码
  11. php入门实现留言板
  12. springMVC 注解版
  13. Postman (Chrome插件)
  14. shell 组合新的变量名
  15. 带你搭一个SpringBoot+SpringData JPA的环境
  16. kafka和storm集群的环境安装
  17. bzoj 3129
  18. 设置Git用户信息
  19. SQL Server 并发死锁解决案例备忘
  20. webpack config

热门文章

  1. port 22: Connection refused
  2. php中三元运算符用法
  3. 148 Sort List 链表上的归并排序和快速排序
  4. [转]MVC 检测用户是否已经登录
  5. 动手实现 React-redux(三):connect 和 mapStateToProps
  6. TextView、EditText
  7. htm 中 &lt;b&gt;和&lt;strong&gt;的区别
  8. 46 Simple Python Exercises-Higher order functions and list comprehensions
  9. ML-学习提纲1
  10. MPP(大规模并行处理)简介