$Desciption$
给一个无向图$,n$个点$m$条边,给定一个$01$序列,如果$a[i]=1,$要求走到这个点奇数次$,$否则,要求走到这个点偶数次$,$请你任选起点$,$输出满足要求的经过点的序列和序列长度$,$序列长度不能超过$4n$
$Solution$
先判断是否有解,如果图不连通,且两个块中都有要求走过奇数次的点,就无解。
我们可以将$a$序列作为初始状态,每经过一次$i$号点,相当于$a[i]~\hat{}=1,$目标是使$a$序列全部变成$0$
选定一个要求走过奇数次的点作为$root,$每个点只走一次,最后回到$root,$那么走过的就是一棵树。
走的路程就相当于对这棵树进行$dfs$遍历,注意:回溯的过程也算一次经过.
所以叶子节点只经过一次,其它节点经过$($儿子数量$+1)$次,
对于一个点,在回溯时,如果$a[i]$还是1,就要进行震荡操作,震荡操作是指对于点$i$回溯到$fa[i]$时,从$fa[i]$走到$i$再走回$fa[i]$的过程,经过这一操作,效果是$a[i]~\hat{}=1,a[fa[i]]~\hat{}=1$
如果$root$需要震荡,我们可以不回溯到$root$,这样就相当于$a[root]^=1$
$Code$
1 |
|