Autosynthesis
这道题目我居然还是想出来了。。。开心
遇事不决转化图论,考虑一个很显然的连边方案,连有向边\((i,a_i)\),表示如果最终位置\(i\)没有被画圈,那么位置\(a_i\)一定被画圈
剩下的看这篇题解,主要是注意代码实现
updpate 2024.7.1
由于要转换为图论,所以考虑连边
连边的时候,发现如果按照有向边\((i,a_i)\)连就可以保证每个点只有一条出边(反之没有什么特性),而这刚好与基环树对应,所以我们连有向边\((i,a_i)\),然后再在基环树上考虑
最后会形成一个基环树森林,对每一颗基环树单独讨论就好了
对一颗基环树做拓扑排序:
对于非环上的点:
叶子一定不会被圈
如果一个点的前驱中存在一个不被圈的,那么这个点一定会被圈
如果一个点的前驱中不存在被圈的,那么这个点一定不会被圈
如果到了环:
经过上面的过程,显然环上的点要么还没被决定是否圈,要么已经被决定一定圈
如果环上所有点都没被决定是否圈,那么有解当且仅当这个环是偶环,且从随便一个点开始进行奇偶赋值就是一组解了
如果环上存在点已经被决定被圈了,那么每两端连续的已经被决定的圈的中间没有被决定的一定是不被圈-被圈-不被圈-被圈-……这种(最后结尾被圈和不被圈都可以),此时一定有解