混合图的欧拉回路。
以前没遇到过这种题,纠结啊。。。搜了下,发现是需要用最大流解的,隐约记得黑书上最大流有讲这个的,就去翻黑书了。
黑书提供了两种算法,第一种自己模拟了下,觉得有点看不懂,觉得它书有的地方没说清楚,而且我自己模拟的结果不对 = =。。。
第二种算法是网上大家经常用的,理解了下。
大致就是,先将无向边定向,就是比如1<->3,可以定它的方向为1->3,1的出度++,3的入度++即可。
读入的时候如果遇到无向边,把这条边加入待建的网络中,流量为1。读入完后,然后用出度减入度得到x,如果x为奇数,肯定不存在欧拉回路,如果没有奇数,就用最大流求解。
如果x大于0,则建一条s(源点)到当前点容量为x/2的边,如果x小于0,建一条从当前点到 t(汇点)容量为|x/2|的边。
然后求最大流,如果是满流(即s出的流==t入的流即可,s指的是建图的时候连接s的边的容量和)就满足欧拉回路。
这题我用递归的dinic做的,开始用并查集判连通了,嘻嘻,好不容易把邻接矩阵改成邻接表了,嘻嘻,我好伟大~~拉拉~~~
这题在zoj排第一了,哇咔咔咔~~~