uoj504
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分做法: