基础并查集
题目描述
1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:
我朋友的朋友是我的朋友;
我敌人的敌人也是我的朋友。
两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。
输入输出格式
输入格式:
输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N)。 第二行M(1<=M<=5000),表示关于强盗的信息条数。 以下M行,每行可能是F p q或是E p q(1<=p q<=N),F表示p和q是朋友,E表示p和q是敌人。输入数据保证不会产生信息的矛盾。
题面非常短,哈……
题意的确还是挺好理解的。最早我做的时候,用了比较麻烦的图论方法:就是处理这张图,再对每一组连通分量各做处理,最后统计。
显然这是个累赘方法……
后来学习了一下HarryHu的方法,嗯……他去年11月就做掉了。对于每一个的敌人,我们记录一下,当下一次遇到他的另一个敌人时候,只需要将敌人合并就可以了,因为敌人间是朋友,并且其他人已经合并为同一个祖先了。
代码一:https://paste.ubuntu.com/p/jcPgpmsXNJ/
代码二:https://paste.ubuntu.com/p/fX24Y35yXD/
但是……
这就很mmp了对不对
但是非常感谢学长 CYC @一个懵了的人 找到了我代码中的读入错误。
由于luogu上本题数据是在windows下生成,文件里的换行符是“ ”,呃然后读入%d时候就出事了。
另外学到了另外一种新的读取无用字符的写法:
scanf("%*c%*c");