uva 10158 - War(并查集)
题目链接:10158 - War
题目大意:有n个人,若干个命令,每个人分属于不同的国家,并且代表国家与其他代表会谈,这将决定国与国之间的同盟关系,1:a与b结盟 2:a与b决裂(成为敌人) 3:判断a与b是否为同盟(不包括不确定) 4:判断a与b是否为敌人。
注意:同盟的同盟是同盟,敌人的敌人是朋友。添加新的关系时与已有的关系冲突的话输出-1。
解题思路:开一个2 * n的数组,0~n - 1表示的是同盟,n~2 * n - 1表示的是n个国家的敌人。
#include <stdio.h>
#include <string.h>
const int N = 100005;
int n, f[N * 2];int getfather(int x) {return x == f[x] ? x : f[x] = getfather(f[x]);
}void setfirend(int x, int y) {int pf = getfather(x), qf = getfather(y);int pe = getfather(x + n), qe = getfather(y + n);if (pe == qf || qe == pf) {printf("%d\n", -1);return;}f[pf] = qf;f[pe] = qe;
}void setenemies(int x, int y) {int pf = getfather(x), qf = getfather(y);int pe = getfather(x + n), qe = getfather(y + n);if (pf == qf || pe == qe) {printf("%d\n", -1);return;}f[pf] = qe;f[qf] = pe;
}void isfirend(int x, int y) {int pf = getfather(x), qf = getfather(y);printf("%d\n", pf == qf ? 1 : 0);
}void isenemies(int x, int y) {int pf = getfather(x), qe = getfather(y + n);printf("%d\n", pf == qe ? 1 : 0);
}int main () {scanf("%d", &n);int cas, a, b;for (int i = 0; i < n; i++) f[i] = i, f[i + n] = i + n;while (scanf("%d%d%d", &cas, &a, &b), cas || a || b) {switch(cas) {case 1:setfirend(a, b);break; case 2:setenemies(a, b);break;case 3:isfirend(a, b);break;case 4:isenemies(a, b);break;}}return 0;
}
uva 10158 - War(并查集)相关推荐
- UVA 10158 War 并查集
第一次自己写并差集一次ac,纪念一下 #include<iostream> #include<algorithm> #include<cstdio> #includ ...
- uva 10158(并查集)
题意:若干个人中告诉你1 a b是朋友2 a b是敌人3 a b查询是否是朋友3 a b查询是否是敌人.前两个若是矛盾则输出-1,否则不输出.后面两个是输出1不是输出0.并且朋友的朋友是朋友,敌人的敌 ...
- uva 10158 War (并查集)
uva 10158 War 四个操作:1)使AB成为朋友.2)使AB成为敌人.3)询问AB是不是朋友.4)询问AB是不是敌人.PS:敌人的敌人是朋友.朋友的朋友是朋友. 开一个2 * n的数组,0~n ...
- UVA10158 - War(并查集)
UVA10158 - War(并查集) 题目链接 题目大意:有n个国家,每个国家有友国和敌国,并且遵守着朋友的朋友是朋友,敌人的敌人是朋友的原则,给你四种操作,题目中有描述,然后让你根据操作进行,对应 ...
- uva 10158 War
原题: A war is being lead between two countries, A and B. As a loyal citizen of C, you decide to help ...
- Almost Union-Find UVA - 11987(并查集的删除操作)
题意:求出每个集合的元素个数,及总和,给出三个操作: 1 将含有a元素和b元素的集合合并:2 将a元素放入含有b元素的集合中:3 输出a元素所在集合的元素个数及总和: 思路:正常并查集,与并查集元素的 ...
- Uva 10158 War
并查集的应用 直接阔成2倍.后N项为对应的敌人 #include <map> #include <set> #include <list> #include < ...
- UVA - 10158 War
题意:看了题解的解释:点击打开链接,知道了就是并查集的操作,用i+n表示i的敌人 #include <iostream> #include <cstdio> #include ...
- 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...
最新文章
- Oculus也陷隐私门:向Facebook发送隐私数据
- pygame显示图片的方法_使用Pygame进行游戏开发(1)
- HttpServlet中的service方法
- 【学习笔记】月末操作-自动清账
- Tengine-Ngnix高级版
- 前端学习(2839):swiper属性
- UNIX网络编程学习笔记(代码超详细解析)(持续更新)
- python实现五大基本算法_算法基础:五大排序算法Python实战教程
- ps 2键盘代码 c语言,MicroBlaze中断编程——以PS/2键盘输入为例
- Chapter 20 磁场对电流的作用
- 程序设计导引【总述】
- 西门子V90 PN控制FB284块的个人理解
- easyboot制作xp、win7、ubuntu、老毛桃winpe、深山红叶dos工具箱多合一光盘【Z】
- dedecms采集侠问题
- 深海迷航坐标传送代码_深海迷航 代码整合
- 股票术语之期货、期权
- java map failed_java.lang.OutOfMemoryError:Map failed总结
- 贴片元器件焊接经验及总结
- paypal如何获取API签名
- 数据挖掘day04-微积分的本质10~11
热门文章
- fsck.ext3:unable to resolve 'LABLE=/home'
- java启动项目出现The Tomcat connector configured to listen on port 7014 failed to start. The port may alrea
- 丈夫三次“买凶杀妻” 妻子毫无所觉称婚姻甜蜜
- python+mysql逆向_Python js逆向 爬取X天下数据,好好看,好好学
- 国内智能硬件和物联网行业研发人员的城市分布图
- 金庸小说中的农业漏洞[ZT]
- EI会议论文的格式要求
- at89c2051 定时器用法 c语言编程资料,用AT89C2051单片机制作的数字电容表.doc
- 前端「HTML+CSS」零基础入门学习笔记
- Python 通过 Tushare Pro 获取财经数据接口