zoj 1992 || poj 1637 Sightseeing Tour

211 篇文章 0 订阅

混合图的欧拉回路。

 

以前没遇到过这种题,纠结啊。。。搜了下,发现是需要用最大流解的,隐约记得黑书上最大流有讲这个的,就去翻黑书了。

 

黑书提供了两种算法,第一种自己模拟了下,觉得有点看不懂,觉得它书有的地方没说清楚,而且我自己模拟的结果不对 = =。。。

 

第二种算法是网上大家经常用的,理解了下。

 

大致就是,先将无向边定向,就是比如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排第一了,哇咔咔咔~~~

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值