摘要:
题意:若干个人中告诉你1 a b是朋友2a b是敌人3a b查询是否是朋友3a b查询是否是敌人。前两个若是矛盾则输出-1,否则不输出。后面两个是输出1不是输出0。并且朋友的朋友是朋友,敌人的敌人是朋友。(题目中的人只会来自于两个不同的集合)思路:建立两个并查集一个维护每个人的朋友集合,另一个维护这个人的敌人集合。在每次查询后需要维护四个集合,与a的朋友集合,b的朋友集合,a的敌人集合,b的敌人集合。对于前两个操作若是产生矛盾输出-1否则更新关系,对于后两个直接判断。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #... 阅读全文
摘要:
题意就不描述了,最简单的并查集。秒掉就OK代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define ll long long10 #define LEN 100010011 #define INF 0x7fffffff12 13 using namespace std;14 15 int n, m;16 int parent[LEN];17 18 void init()19 {20 for(int i=0; i<LEN; ... 阅读全文