从今天开始,我要在这里开始写王正宇大牛每天给我留的题的解题报告。
[题目描述]
说有一个很奇怪的国家,这个国家修路,然后这个路是双行线,然后最NB的地方在于每个点的度都是一个偶数K,说现在这个国家要搞节日活动,要decorate一些路。要decorate的这些路有这样一个特点,就是这些路所构成的子图必须包含原图所有点,并且每个点的度都为2。
[题目分析]
最开始我想了一个方法,但是发现我二了。是一个最简单好像的方法,就是这样的:实际情况就是一个个独立的圈,然后我们来找圈。把这个模型想象成最小路径覆盖,同样是拆一点为两点,只不过这一会就是把无向边拆成两个有向边。但是有一个很大的问题在于,如果对于这个二分图进行Hunary的话,找到的肯定是尽量大的环,但是会出现误判两个点自己成环的情况。所以需要一个很好的方法来防止这种情况的发生。
这个图最大的特点我们发现是这样的,就是说一个点的度数是偶数,既然是这样,那么这个图一定存在一个欧拉回路。那么既然有欧拉回路,那么这个欧拉回路上就是一个个的环,所以一定满足题目的要求。因此我们可以按照欧拉回路的方向进行重定向。这个题还需要注意一点就是,这个K可能很大,所以用dfs可能会爆栈,我最开始就是写了递归,出了问题。后来找国家集训队作业,发现这道题貌似是一个很难想的题,大多数人都没有写,只有郭华阳写了,发现那里写着,必须用非递归,否则会爆栈,改成非递归。AC
[代码]: