[POJ3222]Edge Pairing
这道题觉得十分的厉害,因为看了之后一点想法都没有。不得不Orz Discuss里面的神犇。这题要的是配对,配对这种东西一般是用二分图匹配做的,但是这题完全不懂如何构造出二分图。
Discuss里面的神犇提供了另外一种思路:“图分治”!嗯,这是一个非常神奇的东西,比树分治还神奇。
如果你把一个点u
拿出来,然后DFS它所有相邻的点。
对于一个还没有访问过的点v
,做完它有2种可能性:
- 它剩下一条边
(v, w)
无法匹配。那我们就构造(u, v, w)
这样一对 - 它完美的被解决了,那么我们
(u, v)
这条边就会悬空,不过没关系,我们可以等待下一次发生这样的事情,比方说是(u, s)
,那么我们可以配对(v, u, s)
对于一个比u
时间戳大的点v
,显然我们就不再考虑去做他了,因为他已经做过了。但是(u, v)
这条边还是要考虑的,处理方法和上面2一样。
如果一个点结束的时候还有一条边没有配对,那就返回这条边,让调用它的那个点解决,也就是上面的1。
总之是一个非常神的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|