博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva10158
阅读量:4554 次
发布时间:2019-06-08

本文共 1608 字,大约阅读时间需要 5 分钟。

题目连接请戳

 

解题思路

比较容易想到的思路是开辟另一数组记录每个成员对应的敌人。

之后想明白每个团体只和一个团体敌对就行了。

 

代码

#include
#include
#define N 10010int fri[N], ene[N];int n;void make_set(int n){ for (int i = 1; i <= n; i++) fri[i] = i;}int find(int x){ return (x == fri[x]) ? x : fri[x] = find(fri[x]);}int main(){ int c, a, b; scanf("%d", &n); make_set(n); for (int i = 1; i <= n; i++) ene[i] = 0; scanf("%d%d%d", &c, &a, &b); while (!(c == 0 && a == 0 && b == 0)) { a++; b++; int fa = find(a); int fb = find(b); int qa = ene[fa], qb = ene[fb]; if (qa != 0) qa = find(qa); if (qb != 0) qb = find(qb); if (c == 1) { if (qa == fb && qb == fa) printf("-1\n"); else { if (qa != 0 && qb != 0) { fri[qa] = qb; fri[fa] = fb; } else if (qa != 0) fri[fb] = fa; else if (qb != 0) fri[fa] = fb; else fri[fa] = fb; } } else if (c == 2) { if (fa == fb) printf("-1\n"); else { ene[fa] = fb; ene[fb] = fa; if (qa != 0) fri[qa] = fb; if (qb != 0) fri[qb] = fa; } } else if (c == 3) { if (fa == fb) printf("1\n"); else printf("0\n"); } else if (c == 4) { if (qa == fb && qb == fa) printf("1\n"); else printf("0\n"); } scanf("%d%d%d", &c, &a, &b); } return 0;}

 

转载于:https://www.cnblogs.com/ZengWangli/p/6183338.html

你可能感兴趣的文章
linux img文件压缩及解压
查看>>
计算php脚本执行时间
查看>>
php静态和抽象
查看>>
Jolt:软件业的奥斯卡
查看>>
机器学习课程笔记 (1)
查看>>
基础数据类型 格式化输出
查看>>
第九周作业
查看>>
解析大型.NET ERP系统 单据编码功能实现
查看>>
互联网创业应该如何找到创意 - RethinkDB创始人Slava Akhmechet的几点建议
查看>>
互联网技术架构给我们的启示
查看>>
hbase redis mysql重要知识点总结
查看>>
取数字(dp优化)
查看>>
web app builder arcgis 自定义弹窗
查看>>
第六天冲刺
查看>>
Golang学习 - strconv 包
查看>>
ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path
查看>>
imx6 system boot
查看>>
[SDOI2017]硬币游戏
查看>>
Azure 网站、云服务和虚拟机比较
查看>>
Windows 10在2018四月更新中默认安装了OpenSSH客户端
查看>>