tyvj1863[Poetize I]黑魔*之门

乍一看我以为题意是欧拉回路,后来注意到子图不一定连通,也就是说子图可以是一堆欧拉回路。

最好的做法是认真观察样例,然后猜测性质:如果加的边所连的两个点之前已经连通,答案*2+1,否则答案不变。用并查集维护即可。为了保险,可以用暴力拍一下,发现没问题。

尝试严格证明一下。方便起见,认为一个点不选也是一种可行方案,最后输出答案时-1。

太长不看版:把空集视为可行方案。加入一条边,如果能够找到一个含这个点的环,就把这个环和之前所有的可行方案异或一下(出现零次或两次的边不选,出现一次的边选),得到和之前的方案一样多的新方案,而且不重不漏。

完(quanshi)整(feihua)版:

如果加入的这条边所连的两个点之前不连通,那么不存在选择这条边的合法方案。因为含有这条边的方案必然用这条边连接了两坨连通块(子图中可以有其他孤立的连通块,但这里可以先不考虑,只考虑包含新加的那条边的连通块)。如果符合要求那么每一坨连通块中的点度数之和都是偶数,而这显然不成立。因为一条边会对度数和贡献2,而新加的那条边向两个连通块的度数之和各贡献了1,因此两坨连通块的度数之和都是奇数。(其实用欧拉回路的性质想一想就出来了,这种情况下新加的边一定是子图的桥,而欧拉回路里显然没有桥。)

如果加入的这条边所连的两个点之前不连通,我们只考虑包含这条边的新方案数有多少。

假如我们加了边(u,v),之前存在一条路径L从u到v。如果某一种包含(u,v)的新方案不包含L,我们可以把(u,v)从方案中删掉,把L加进方案里,得到一个合法方案。如果原先(加入(u,v)之前)有一个合法方案包含L,那么可以把L删掉,把(u,v)加进去。这些方案不会重复,从而包含(u,v)且不包含L的新方案和原先的包含L的方案一一对应.

如果某一种新方案包含L,我们可以把L和(u,v)都从方案里删掉,这时删掉的是一个环,环上每个点度数-2仍为偶数。如果加入(u,v)之前某种方案不含L,那么可以把L和边(u,v)都加进去,环上每个点度数+2仍为偶数。这些方案同样不重复,从而包含(u,v)且包含L的新方案和原先的不包含L的方案一一对应。综上,包含(u,v)的方案和不包含(u,v)的方案一一对应。所以加一条边,方案数乘2.空集不合法就从0开始每次乘2加1

Zyf的博客说可以用平面图欧拉公式?感觉有点悬乎,这题的图显然可以不是平面图。据说出题人李煜东的题解是把图拆成一堆“元环”,每个环选或不选,最后只考虑选了奇数次的边。其实是相当于把元环异或起来?不过找不到lyd的题解,不知道元环具体是怎么回事QAQ。

原文地址:https://www.cnblogs.com/liu-runda/p/5966741.html