hdu4744 Starloop System

建模方法大概就是像网上其他人说的那样。。。可以看oyk的博客http://www.cnblogs.com/oyking/archive/2013/09/15/3323483.html

下面讨论一下为什么这样建模是对的:

一个点u属于k个简单环的话,那么在每个环里都有两条边连u,所以u共有2k条边。

考虑一个环中u的两条无向边,可以转换成两条有向边,一个进入u,一个从u出去。

那么对于一个u来说入度为k,出度为k。这样模型就出来了。按这个模型跑费用流后,每个点的入度出度都为k了。

再证u的入度出度都为k时,u属于k个简单环:

考虑u所属的联通分量,这个分量是联通的且每个点的入度等于出度,满足欧拉回路的条件。

那么肯定能够找到一个包含u的简单环,删掉这个简单环上的边后,再重复找环,共能找到k个简单环,得证。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

虽然知道大家基本上都是用zkw费用流过的但还是忍不住写一发。。。

写了一发普通的费用流。。。tle了。。。。

然后发现是稠密图,现学现写,搞了一发dijkstra增广的费用流。。。。tle了。。。把priority_queue换成手写的。。还是tle。。。预处理所有开方的答案。。。还是tle。。。。

仔细看了一下input。。。最大流量为5000,边数最多为100*100级别。。。要是增广10^3级别,每次消耗10^4级别不就tle了。。。

看了一眼zkw费用流的介绍,感觉正好能解决这个问题,于是就扒了oyk的zkw费用流模板下来。。。。843ms ac。。。

代码就不贴了。。。和oyk的代码实在是相似。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值