题目链接:http://poj.org/problem?id=1703

已经不是第一次接触种类并查集了,直到今天才搞懂。

感谢红黑联盟,感谢杰哥!!!

每个节点只要关系确定,不管是不是同一个集合里面,都把他们放到一个集合里面,用一个rank[]数组记录他们与根节点的关系,比较神奇的地方有两处:

1、find函数里面,因为find是递归写的,不断往上找,不断更新rank[x](与根节点的关系),这个%k,也是很牛逼的,2种类型,标号只有01;

2、Union函数里面,更新rank[fy],rank[y]这里是(rank[x] - rank[y] +T)%2,这里特值法证明一下吧,我智商已经不够用了,比如说,新的节点0,合并后,就往上找,比如说找到了110,这个点肯定不是跟根同一个集合,0-A,0-B,然后(0-0+1)%2==1;

啊哈,特例搞一下吧,脑容量不够了。

#include<cstdio>

const int N = ;
int n, m, f[N], rank[N]; void init()
{
for(int i=; i<=n; ++i)
f[i]=i,rank[i]=;
} int find(int x)
{
if(x==f[x])
return f[x];
int fa=f[x];
f[x] = find(f[x]);
rank[x] = (rank[x]+rank[fa])%;
return f[x];
} bool Union(int x,int y)
{
int fx=find(x), fy=find(y);
if(fx==fy) return false;
f[fy] = fx;
rank[fy] = (rank[x]-rank[y]+)%;
} int main()
{
int T,a,b,fa,fb;
char ch;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%*c",&n,&m);
init();
for(int i=; i<m; ++i)
{
scanf("%c%d%d%*c",&ch,&a,&b);
if(ch=='D')
{
Union(a,b);
}
else
{
fa = find(a), fb=find(b);
if(fa==fb)
{
if(rank[a]==rank[b]) puts("In the same gang.");
else puts("In different gangs.");
}
else
puts("Not sure yet.");
}
}
}
return ;
}

最新文章

  1. WPF实现炫酷Loading控件
  2. linux 下配置 nodejs+ionic+cordova
  3. JSP 动作元素
  4. Android ListView无法触发ItemClick事件
  5. 解决eclipse打开报错:failed to create the java virtual ma
  6. SurfaceView的一个小应用:开发示波器
  7. UDP(socket)数据访问和封装情况C++代码
  8. Java之旅(三)--- JSTL和EL表情
  9. 前端学习——ionic/AngularJs——获取验证码倒计时按钮
  10. Web office apps 安装部署
  11. UbuntuNFS服务器配置
  12. 试着简单易懂记录synchronized this object Class的区别,模拟ConcurrentHashMap
  13. Dubbo框架应用之(一)--服务体系
  14. 微信网页浏览器打开链接后跳转到其他浏览器下载APK文件包
  15. easyui的下拉框combox动态复赋值显示在前端
  16. Kubernetes 笔记 02 demo 初体验
  17. 学号 20175223 《Java程序设计》第2周学习总结
  18. 【树状数组套主席树】带修改区间K大数
  19. Assert.IsNotNull 方法(判断对象不为NULL)
  20. Oracle增加一列、修改一列数据类型

热门文章

  1. python进制转换或数据格式转换
  2. oracle命令查看表结构及表索引
  3. gcc 4.9编译
  4. 【转】java序列化技术
  5. java实现两个整数相除保留一位小数
  6. dt4.0上传图片总是压缩解决办法,为什么我设置了不压缩图片,程序还是压缩呢?
  7. [LeetCode]19. Remove Nth Node From End of List删除链表的倒数第N个节点
  8. Redis整理第二波(启动、命令)
  9. Python并发编程之进程池与线程池
  10. 解决 Maven 项目中找不到 jdk 的 tools.jar 文件的办法(多数情况下适用)