题目链接: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(并查集)相关推荐

  1. UVA 10158 War 并查集

    第一次自己写并差集一次ac,纪念一下 #include<iostream> #include<algorithm> #include<cstdio> #includ ...

  2. uva 10158(并查集)

    题意:若干个人中告诉你1 a b是朋友2 a b是敌人3 a b查询是否是朋友3 a b查询是否是敌人.前两个若是矛盾则输出-1,否则不输出.后面两个是输出1不是输出0.并且朋友的朋友是朋友,敌人的敌 ...

  3. uva 10158 War (并查集)

    uva 10158 War 四个操作:1)使AB成为朋友.2)使AB成为敌人.3)询问AB是不是朋友.4)询问AB是不是敌人.PS:敌人的敌人是朋友.朋友的朋友是朋友. 开一个2 * n的数组,0~n ...

  4. UVA10158 - War(并查集)

    UVA10158 - War(并查集) 题目链接 题目大意:有n个国家,每个国家有友国和敌国,并且遵守着朋友的朋友是朋友,敌人的敌人是朋友的原则,给你四种操作,题目中有描述,然后让你根据操作进行,对应 ...

  5. uva 10158 War

    原题: A war is being lead between two countries, A and B. As a loyal citizen of C, you decide to help ...

  6. Almost Union-Find UVA - 11987(并查集的删除操作)

    题意:求出每个集合的元素个数,及总和,给出三个操作: 1 将含有a元素和b元素的集合合并:2 将a元素放入含有b元素的集合中:3 输出a元素所在集合的元素个数及总和: 思路:正常并查集,与并查集元素的 ...

  7. Uva 10158 War

    并查集的应用 直接阔成2倍.后N项为对应的敌人 #include <map> #include <set> #include <list> #include < ...

  8. UVA - 10158 War

    题意:看了题解的解释:点击打开链接,知道了就是并查集的操作,用i+n表示i的敌人 #include <iostream> #include <cstdio> #include ...

  9. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)

    这道题要逆向思维 反过来从大到小枚举, 就是在矩阵中一点一点加进去数字,这样比较 好操作, 如果正着做就要一点一点删除数字, 不好做. 我们需要在这个过程中维护联通块的个数, 这里用到了并查集. 首先 ...

最新文章

  1. Oculus也陷隐私门:向Facebook发送隐私数据
  2. pygame显示图片的方法_使用Pygame进行游戏开发(1)
  3. HttpServlet中的service方法
  4. 【学习笔记】月末操作-自动清账
  5. Tengine-Ngnix高级版
  6. 前端学习(2839):swiper属性
  7. UNIX网络编程学习笔记(代码超详细解析)(持续更新)
  8. python实现五大基本算法_算法基础:五大排序算法Python实战教程
  9. ps 2键盘代码 c语言,MicroBlaze中断编程——以PS/2键盘输入为例
  10. Chapter 20 磁场对电流的作用
  11. 程序设计导引【总述】
  12. 西门子V90 PN控制FB284块的个人理解
  13. easyboot制作xp、win7、ubuntu、老毛桃winpe、深山红叶dos工具箱多合一光盘【Z】
  14. dedecms采集侠问题
  15. 深海迷航坐标传送代码_深海迷航 代码整合
  16. 股票术语之期货、期权
  17. java map failed_java.lang.OutOfMemoryError:Map failed总结
  18. 贴片元器件焊接经验及总结
  19. paypal如何获取API签名
  20. 数据挖掘day04-微积分的本质10~11

热门文章

  1. fsck.ext3:unable to resolve 'LABLE=/home'
  2. java启动项目出现The Tomcat connector configured to listen on port 7014 failed to start. The port may alrea
  3. 丈夫三次“买凶杀妻” 妻子毫无所觉称婚姻甜蜜
  4. python+mysql逆向_Python js逆向 爬取X天下数据,好好看,好好学
  5. 国内智能硬件和物联网行业研发人员的城市分布图
  6. 金庸小说中的农业漏洞[ZT]
  7. EI会议论文的格式要求
  8. at89c2051 定时器用法 c语言编程资料,用AT89C2051单片机制作的数字电容表.doc
  9. 前端「HTML+CSS」零基础入门学习笔记
  10. Python 通过 Tushare Pro 获取财经数据接口