源自--------------------------------
Ice_Crazy(死之前应该会继续更新的。。。)
最大流水题:hdu1532、hdu3549、hdu2732(拆点、经典题目)
hdu3572
isap,水,建图:
源点0和每个任务,都建立一个0到任务ni的容量为pi的边;
对于某个任务,其可以执行的时间在si到ei,那么这个任务到si
至ei(含临界)这些时间点都建立容量为1的边;
每个时间点到汇点建立一条容量为m的边。
hdu4309
4000多次的网络流。。。
建图:
0到每个城市连边、容量为该城市人口;
好的桥,连容量为无上限的边;
坏的桥,未修复时连容量为1的边、修复后连容量无上
限的边。(这个好坑啊。。没修复的时候也可以走一个人,
可以1Y的代码愣是因为这个检查了一天呀。。。)
防空洞,直接从防空洞的起始点a到e(终点)连边,没必
要再在边a和b之间虚拟一个点x而建立a到x、x到b、以及x到
e的边。直接建立a到e的边就行。
hdu3605
最大流+状态压缩、判满流,难度一般。
10W个人么、所以直接网络流是必定TLE的;
不过注意到m只有10、所以10W的点(人)是可以合并的,用val[i]表示
可以在i的二进制表示中、第j位表示为1的、第j个星球生存的的人的总数,
这样合并之后就最多只有(1<<10)个节点了,网络流之(第j位为1、表示可以
在第j个星球生存)。
hdu1569
网络流,最大点权独立集=总权值-最小点权覆盖集。
最小割的应用,建图跑网络流,求出最小割,那么把这个最小割移除掉,
从源点到汇点就一毛钱都不能到达了。用sum减去这个最小割(也就是最大流)
既为所求。
上面说的很不详细、建图呀什么都没有说,读不懂很正常= =,因为有更
详细的,看这个论文(不是ppt)吧:胡伯涛《最小割模型在信息学竞赛中的应
用》,直接跳到第五部分读就行了。
hdu2883
网络流+离散化。
和hdu3572一样的题,只是时间范围是100W,介个有点儿多了。
不过才200个人么,所以点的数量不多,离散化一下就行了(比如有对
于ti和ti+1这两个时间点,都只有第j号任务可以执行,那么完全可以
把ti和ti+1这两个时间点合并,从而和汇点建立一条容量为2个单位的
边(我是将ti+1点并入了ti,j任务和ti建边、而省掉ti+1))。
这个题给的时间和hdu3752的有一点儿不同,对于si和ei,可以用
来烤肉的时间是ei-si;而对于hdu3752题,对于一个任务有si、ei,那
么可以执行这个任务的单位时间段有ei-si+1条,既题意对待临界的方
式不同。
刚开始这点儿没有想清楚,做2883这个题的时候就用了别的拆点
的方法去处理临界了,处理完才发现这个题不用考虑这个。。。
最大流水题:hdu1532、hdu3549、hdu2732(拆点、经典题目)
hdu3572
isap,水,建图:
源点0和每个任务,都建立一个0到任务ni的容量为pi的边;
对于某个任务,其可以执行的时间在si到ei,那么这个任务到si
至ei(含临界)这些时间点都建立容量为1的边;
每个时间点到汇点建立一条容量为m的边。
hdu4309
4000多次的网络流。。。
建图:
0到每个城市连边、容量为该城市人口;
好的桥,连容量为无上限的边;
坏的桥,未修复时连容量为1的边、修复后连容量无上
限的边。(这个好坑啊。。没修复的时候也可以走一个人,
可以1Y的代码愣是因为这个检查了一天呀。。。)
防空洞,直接从防空洞的起始点a到e(终点)连边,没必
要再在边a和b之间虚拟一个点x而建立a到x、x到b、以及x到
e的边。直接建立a到e的边就行。
hdu3605
最大流+状态压缩、判满流,难度一般。
10W个人么、所以直接网络流是必定TLE的;
不过注意到m只有10、所以10W的点(人)是可以合并的,用val[i]表示
可以在i的二进制表示中、第j位表示为1的、第j个星球生存的的人的总数,
这样合并之后就最多只有(1<<10)个节点了,网络流之(第j位为1、表示可以
在第j个星球生存)。
hdu1569
网络流,最大点权独立集=总权值-最小点权覆盖集。
最小割的应用,建图跑网络流,求出最小割,那么把这个最小割移除掉,
从源点到汇点就一毛钱都不能到达了。用sum减去这个最小割(也就是最大流)
既为所求。
上面说的很不详细、建图呀什么都没有说,读不懂很正常= =,因为有更
详细的,看这个论文(不是ppt)吧:胡伯涛《最小割模型在信息学竞赛中的应
用》,直接跳到第五部分读就行了。
hdu2883
网络流+离散化。
和hdu3572一样的题,只是时间范围是100W,介个有点儿多了。
不过才200个人么,所以点的数量不多,离散化一下就行了(比如有对
于ti和ti+1这两个时间点,都只有第j号任务可以执行,那么完全可以
把ti和ti+1这两个时间点合并,从而和汇点建立一条容量为2个单位的
边(我是将ti+1点并入了ti,j任务和ti建边、而省掉ti+1))。
这个题给的时间和hdu3752的有一点儿不同,对于si和ei,可以用
来烤肉的时间是ei-si;而对于hdu3752题,对于一个任务有si、ei,那
么可以执行这个任务的单位时间段有ei-si+1条,既题意对待临界的方
式不同。
刚开始这点儿没有想清楚,做2883这个题的时候就用了别的拆点
的方法去处理临界了,处理完才发现这个题不用考虑这个。。。