csu 1356 Catch
题意:给定n个点,m条边的无向图(没有重边和子环)。从给定点出发,每个时间走到相邻的点,可以走重复的边,相邻时间不能停留在同一点,判断是否存在某个时间停留在任意的n个点。
分析:
(1)首先,和出发点的位置没有关系。因为可以走重复的边,且时间没有限制大小。
(2)图必须是联通的
(3)
1)图为2-0-1-3
从0点出发(时间为0),一个时间后到达1或2(时间为1),再一个时间后到达0或3(时间为2)。。。
可以发现,点分为两类,奇数时间到达和偶数时间到达,答案为NO
2)图为:2-0-1-2(奇环)
此图中的点,即可以在奇数时间到达,又可以在偶数时间到达。则答案为YES。比如都有个偶数的到达时间,在小时间在往返的走重复边后,(不改变奇偶,只改变大小,+2)
3)图为:2-0-1-3-2(偶环)
此图中的点和1)类似,同样分为两类。答案为NO
综上:所有点必须都能在奇数时间和偶数时间到达,则需要图能够改变到达点时间奇偶的结构。
由上可知,图中必须存在奇环。问题变成了,判断图是否存在奇环和是否连通
判断存在奇环的方法:
(1)二分图染色 dfs染色
//#pragma warning (disable: 4786)
//#pragma comment (linker, "/STACK:16777216")
//HEAD
#include
#include
#include
#include
#include
#include
#include
#include
#include
(2)二分图染色 bfs染色
(3)并查集
加权并查集的特例种类并查集。既可以判断连通性,也可以判断种类。
加权并查集,需要取模是,注意正确性,尤其是当有减法和除法。
//#pragma warning (disable: 4786)
//#pragma comment (linker, "/STACK:16777216")
//HEAD
#include
#include
#include
#include
#include
#include
#include
#include
#include