POJ1703带权并查集(距离或者异或)
题意:
有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作
1 D a b 给出a b 两个人不属于同一个帮派
2 A a b 问a b 两个人关系 输出 同一个帮派,不是同一个帮派,或者不确定
思路:
比较简单的带权并查集,容易想,方法固定,可以开距离根节点的距离这个权,或者是异或也行(应该是行,没试),如果是距离根节点的话 就是每次D a b 都把a b 看成是距离1,然后接在一起,A a b 时候看是不是同一个祖先,是的话看看距离权值是否奇偶性相同,如果不是同一个祖先就是不确定,还有连接之前记得看看是不是已经是一个祖先了,如果是就不要连接了,不然会把整体的权值弄乱,对于异或的话,直接在奇偶性那改成判断相等就行了。
#include<stdio.h>
#include<string.h>
#define N 100000 + 10
int mer[N];
int s_x[N];
int Finds(int x)
{
if(x == mer[x]) return x;
int t = mer[x];
mer[x] = Finds(mer[x]);
s_x[x] += s_x[t];
return mer[x];
}
int main ()
{
int t ,n ,m ,i ,a ,b;
char str[5];
scanf("%d" ,&t);
while(t--)
{
scanf("%d %d" ,&n ,&m);
for(i = 1 ;i <= n ;i ++)
mer[i] = i ,s_x[i] = 0;
for(i = 1 ;i <= m ;i ++)
{
scanf("%s %d %d" ,str ,&a ,&b);
int x = Finds(a);
int y = Finds(b);
if(str[0] == 'D')
{
if(x == y) continue;
if(s_x[a] >= s_x[b])
{
mer[y] = x;
s_x[y] = s_x[a] - s_x[b] + 1;
}
else
{
mer[x] = y;
s_x[x] = s_x[b] - s_x[a] - 1;
}
}
else
{
if(n == 2 && a != b)
{
printf("In different gangs.");
}
else if(x == y)
{
if(s_x[a] % 2 == s_x[b] % 2)
printf("In the same gang.\n");
else printf("In different gangs.\n");
}
else
{
printf("Not sure yet.\n");
}
}
}
}
return 0;
}
POJ1703带权并查集(距离或者异或)相关推荐
- POJ1988(带权并查集,搬砖块)
题意: 可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...
- LA3027简单带权并查集
题意: 有n个点,一开始大家都是独立的点,然后给出一些关系,a,b表示a是b的父亲节点,距离是abs(a-b)%1000,然后有一些询问,每次询问一个节点a到父亲节点的距离是多少? 思路: ...
- poj1182 and 携程预赛2第一题 带权并查集
题意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)
How Many Answers Are Wrong HDU - 3038 点击打开链接 题意:现在有n个数(你并不知道这n个数是什么),m次查询,每次查询给出u,v,w.表示从第u个数到第v个数的 ...
- CDOJ 1070 秋实大哥打游戏 带权并查集
链接 F - 秋实大哥打游戏 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit ...
- 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
秋实大哥打游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- POJ 2492 A Bug's Life 带权并查集
题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...
- How Many Answers Are Wrong HDU - 3038(带权并查集)
TT and FF are - friends. Uh- very very good friends -________-b FF is a bad boy, he is always wooing ...
- BZOJ 3362 Navigation Nightmare 带权并查集
题目大意:给定一些点之间的位置关系,求两个点之间的曼哈顿距离 此题土豪题.只是POJ也有一道相同的题,能够刷一下 别被题目坑到了,这题不强制在线.把询问离线处理就可以 然后就是带权并查集的问题了.. ...
最新文章
- 继人工智能攻陷围棋,德州扑克也沦陷了
- python 画图 内存-用python 10min手写一个简易的实时内存监控系统
- table 在网页无法顶到头部问题
- Java里的堆(heap)栈(stack)和方法区(method)
- zoj 3327 Friend Number 模拟题
- matlab常用函数——方程函数
- HDU #5733 tetrahedron
- 特斯拉皮卡,会大卖吗?
- 社区发现(五)--BP(信念传播算法)
- 【Flutter】基础组件【07】Appbar
- app上显示服务器数据加载失败,APP中的6种常见数据加载
- 如何走出创新者的窘境?走向2049
- 路由器(无线桥接)中继模式遇到无法上网的解决方案
- VS2019C++编译GDAL3.3.2+SQLite3+PROJ6+GEOS3.7.3+HDF4+HDF5(保姆级教程)
- 总结 | C#实现Excel导出功能
- Dockerfile Registry WebUI 之 docker-registry-frontend 高级应用
- 如何进行英文文献检索
- 百度地图 android 自身地点,Android使用百度地图SDK获得当前设备位置所在的省、市(系列1)...
- 【Vue.JS】纯 Vue.js 制作甘特图
- 7款免费发短信软件,看看哪一款适合你