题意
对一张无重边、无自环的 个点的无向图,定义圈为可以重复经过同一个点多次、但不能多次经过同一条边的环。例如, 不是一个合法的圈,而 是一个合法的圈。
定义无向图的双圈覆盖为:图的若干个圈,使得图中每条边恰好出现在两个圈中(无论方向)。
一个定理:如果一个图有哈密尔顿回路的话,它就一定有双圈覆盖。
现在给定一张无重边、无自环的 个点的无向图,保证这个图存在哈密尔顿回路(会给出),且每个点的度数至少为 。
求它的一个双圈覆盖。
对 的数据,.
对所有的数据,.
题解
一个圈相当于一条欧拉回路,求双圈覆盖相当于求一系列欧拉回路使得每条边恰好经过次。考虑题目的特殊条件:首先是一个从依次连到的环(以下把这个称为环,这上面的边称为环边),再加上若干其它边,每个点的度数不小于。
每个点的度数不小于这个条件比较奇怪,先考虑每个点度数都为:如果每个点的度数都是,那么可以找到一系列欧拉回路覆盖所有边一次;考虑把边分为两组使得每组的每个点的度数都是:因为除了环边外的边使得每个点的度数都为,再加上间隔的环边即可,这两组再加上原来的环即符合双圈覆盖的要求。
问题剩下如何使每个点度数为,考虑把一个度数的点的度数:由于环的结构不能破坏要特殊考虑,设在环上的下一个点为,而与的非环边个。我们需要把的一个非环边删掉,同时加上一条等效的边,又要不破坏环的结构。设原来有一条非环边连向,拆掉再新建一个点,使与相连(即把替换为),为了不破坏环的结构,把与相连,最后把与相连以代替原来的边,这样刚好有条连边,且的度数恰好减少,其他点都不变。一直这样下去,就可以构造出所有度数都为的图了。