4分做法:
先弱化问题成点的颜色不会变化。
考虑二分,每次点亮一段编号连续的前缀。找到第一个"有重复颜色的前缀"(r)
然后从(r)开始二分一个左端点(l),使得([l,r])有重复颜色且(l)最小。
回到原题,由于(L_{L_i}=i),所以我们操作一个集合两次,则它的颜色会回归原样。
所以二分时我们点亮同一个集合两次即可。
44分做法:
考虑询问点对。我们询问一个点对((x,y))两次。
如果第一次和第二次结果不同的有关系,否则没有关系。
在找到一个有关系的点对((x,y))后,我们按照同一个方法找到(y)的出边。
这样子可以找到每个环。
而且这样子的好处在于:对于一个环,假设颜色为(a_1,a_2,...a_n),询问后会变为(a_2,a_3,...a_n,a_2)。
这样子比较好的保留了环的颜色。
由于环上相邻两个点的颜色不会相同,所以对于每个环上的点(x),询问和它不相邻的点的颜色和它是否相同。
有可能找不到。
但是根据这些结果可以找到每个点和它相同颜色的点。
感觉十分难以描述。。。。。
64分做法: