POJ_1703 并查集应用
通过这题基本完整理解了并查集的构建和使用。很轻巧的一种数据结构。
本题的方法值得注意:并没有直接构建两个帮派的集合,而是构建:
关系确认集合+若干单元素集(也即未确认帮派的初始状态)并辅助一个rel数组记录和父节点的关系(0相同,1不同)。
若关系确认,则将两个树合并到一棵树上;同时凭借rel数组判断是否和父亲属于同一帮派,进而判断两个元素是否属于同一帮派。
本题的思路很清楚,但难点在于如何合并集合 和 如何更新rel数组。
此处附上某大佬的解题报告,非常清晰(同时在更新rel的方法上并不唯一,代码中注释部分给出了第二种判定方式,本质是一样的)
大佬链接:https://www.cnblogs.com/zzy19961112/p/6043420.html
ac代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
//一言以蔽之,并查集是一种越查越快的数据结构
const int maxn=;
int t,n,m,a,b;
int p[maxn];
int rel[maxn];//为0表示与父一样,否则为不一样
int find(int x){
int temp=p[x];
if(x==p[x]){
return x;
}
p[x]=find(p[x]);//搜索优化 p[x]=根。使得下次查找时只需一次查找 (开始看的时候没有深刻理解这一句的作用)
//这里存在一个递归思维,也就是说,在给rel[x]赋值之前已经确保其父节点至根节点的值均已正确。
//int temp=p[x];//bug,不能写在这里,因为此时p[x]已经不再是父节点而是根节点
//rel[x]=(rel[temp]==rel[x])?0:1; //re[x]在未更新之前表示父子关系,更新后表示和根的关系。 (事实上此时x的父亲p[x]就等于根)
rel[x] = (rel[temp] + rel[x]) % ;
return p[x];
}
void unionset(int x,int y,int px,int py){
p[px]=py;
rel[px] = (rel[y] + - rel[x]) % ;
//rel[px]=(rel[x]==rel[y])?1:0;
}
int main(void){
cin>>t;
while(t--){
cin>>n>>m;
//初始化并查集;
for(int i=;i<=n;i++) {
p[i]=i;
rel[i]=;
}
while(m--){
char op;
int a,b;
scanf("\n%c %d %d",&op,&a,&b);
int pa=find(a),pb=find(b);
if(op=='A'){
if(pa!=pb){
printf("Not sure yet.\n");
continue;
} if(rel[a]==rel[b]){
printf("In the same gang.\n");
continue;
}
printf("In different gangs.\n");//太恶心了,一开始少了个句号,wa到怀疑人生;这个bug找得我心态快崩了。。。。 还是naive
continue;
}
if(op=='D'){
if(pa!=pb)unionset(a,b,pa,pb);
}
}
}
return ;
}
POJ_1703 并查集应用的更多相关文章
- POJ_1703 Find them, Catch them 【并查集】
一.题面 POJ1703 二.分析 需要将并查集与矢量法则相结合.par数组用以记录父节点,rank用以记录与父节点的关系.如题意,有两种关系,设定0是属于同一个帮派,1表示不属于同一个帮派. 运用并 ...
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- 关押罪犯 and 食物链(并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- bzoj1854--并查集
这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)
Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- Codeforces 731C Socks 并查集
题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...
随机推荐
- 升级PHP版本导致zabbix无法访问解决办法
故障现象:无法打开zabbix首页,提示缺少zabbix.conf配置文件 原因分析:升级yum安装php版本了,升级前卸载了原PHP5.4版本导致 解决办法: 重新安装zabbix yum inst ...
- org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade 解决方案 (网络转载)
前提是配置了cascade=all,依然报这种错误,其实出现这个错误的大多数情况根本不是像网上的帖子所说的是什么级联删除的问题,而且hibernate session关于实体生命周期操作的原因,这里明 ...
- 深入学习AngularJS中数据的双向绑定机制
来自:http://www.jb51.net/article/80454.htm Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持 ...
- Cookies and Session Tracking Client Identification cookie与会话跟踪 客户端识别
w HTTP The Definitive Guide Cookies can be used to track users as they make multiple transactions to ...
- int文档
文档 class int(object): """ int(x=0) -> integer int(x, base=10) -> integer ------ ...
- Java根据IP地址获取MAC地址
先使用ping -n 2 10.0.0.1 命令,如果返回的结果中含有TTL字符,证明ping 10.0.0.1是能ping通的,即可达的.如果在Linux机器上请使用 ping -c 2 10.0 ...
- Linux df命令
df命令用于查看磁盘的分区,磁盘已使用的空间,剩余的空间 1.用法 df [选项] [文件..] 2.命令选项 -a,--all 全部文件系统-h,--human-readable 以以合适的单位来显 ...
- (0.2.5)Mysql安装——RPM方式安装
rpm安装mysql 卸载与安装服务端 一.安装服务端与客户端 #查看RPM包中所有的文件shell> rpm -qpl mysql-community-server-version-dis ...
- rabbitMQ基本概念
一.网页登录方法 http://127.0.0.1:15672/ 用户名和密码默认为guest/guest 用java代码去连接rabbitmq用的端口是5672 二.rabbitMQ基本概念 Rab ...
- python学习笔记(十五)异常处理
python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 . 例 ...