题意
有向图一定存在包含点1在内的回路,出度至少为1,路径长度都为1,电车的速度也为1,电车从1出发。现在要在某些点安装摄像头,求最大的t,使每隔t时间(包含开始时即1必须装摄像头),电车一定会出现在某个摄像头下且其它时间电车不会出现在这些摄像头下,并输出这些摄像头的位置。
题解
t是一定存在的,最小为1。设t满足题目要求,那么此时从1出发到某点的所有路径长度(mod t)必是一个定值(否则因为出度至少为1,电车可以一直走那么电车一定可以走到某点,从1出发到该点的路径长度有(mod t)=0和(mod t)≠0的两种情况,那么无论在该点是否安装摄像头均不满足题意)。
设点集Si,从1出发到Si任意点的任意路径长度(mod t)=i,那么t最大时S0就是所求点集。S0,S1……St-1是没有交集的,且S=S0∪S1∪……∪St-1是从1出发能到达的所有点。
从1出发进行dfs并记录深度d[i]。如果只有树边存在那么t可以取到无限大,但因为必存在回路所以一定有非树边。对于非树边(u,v)且u,v∈S,要满足题解第一段的要求根据同余定理那么t只能取abs(d[u]+1-d[v])的约数,t取最大则t是所有abs(d[u]+1-d[v])的gcd。同时由于d[1]=0,即1∈S0,自动满足了在1安装摄像头的要求(安装摄像头的位置就是S0)。