标签:否则 交集 解决 需要 数据 简单的 最小生成树 转换 header
大意就是在一张图上给某些边复制1遍,使这张图存在欧拉回路。
由于复制一条边必然会修改两个点的状态,所以不难想到可以将这些点两两配对,于是可以求出来原图的一颗最小生成树,那么需要复制的边一定在最小生成树上,所以在树上两两配对即可。
考虑贪心,对于每条边,只有在这条边两边需要修改的点的个数是奇数,也就是不能内部解决的时候才会跨过这条边,dfs一遍即可。
首先将坐标转换,(i,j)->(i-j+1,j),那么需要通过的位置形成了矩形,两个矩形的交集就是位置。
所以不难发现这是一个杨氏矩阵,预处理阶乘和阶乘的前缀积就可以实现$O(1)$回答每组询问。
细节很多。需要大力分类讨论。
考虑维护一个集合S,对于集合S中的元素满足这个元素的权值是所有位置在它后面的元素中最小的。
那么若某个元素在集合中,它最终属于 $S_{last} mod 2$ last表示集合中比他位置靠前的最后的元素。
否则,最终的朝向与初始相同。
证明可以感性理解一下,首先对于第一次操作必然翻2,那么对于后面的操作,如果当前元素不是后面最小的,那么一定会翻i,因为上一个人一定翻了i+1。
否则,翻i+1会使自己丢掉i,那么只有i是后面最小的时候可能合法。
然后可以用个什么数据结构维护一下,由于题目保证了单调减,所以比较简单的做法是用set维护。
标签:否则 交集 解决 需要 数据 简单的 最小生成树 转换 header
原文地址:https://www.cnblogs.com/hzoi-cbx/p/12246872.html