1.HDU-3572
题意:N个任务,每个任务有Pi(需要干多少天),Si(开始时间),Ei(结束时间),M个机器,一个机器一天最多处理一个任务,询问是否所有的任务都能完成。
建图模型:
s 向 [1, 500]天开始建立一条流量为m的边,然后对于每天来说,往可以去执行任务的点建立一条流量为1的边,每个任务往 t 建立一条流量为Pi的边。
最后判断最大流和sum Pi是否相等。
2.HDU-3388
题意:填数问题。
建图模型:从S -> 行之和 -> 格子 -> 列之和 -> T。 为了保证每个点都至少是1,从行之和里抽格子数目的流量,放到S里,往每个格子链接1的流量。
最后看看流量确定格子的数值。
3.HDU-2883
题意:和 (1) 一样, 就是数据大小不一样。
建图模型:将时间分成不同的单位格子, 然后每个任务与每个不同的单位时间建边。
4.HDU-3879
题意:最大权闭合子图
建图模型:考虑一个最小割模型, 我们先将所有的正权值加入到答案里, 然后再把 s 与 所有的 正权点连边, t与所有的 负权点连边, 流量都为点权的绝对值。
再把 原图中的边 也建立对应的流量为inf的边。
这样考虑一个最小割, 我们只能将一个点从割到s这边, 或者是割到t这一边, 我们就是需要最小的代价, 将所有的点划分为1边就是答案了。
5.HDU-3472
题意:混合图判断欧拉路径
1.首先判断图的连通性,若不连通,无解。
2.然后任意定向无向边,计算每个点i的入度和出度之差deg[i]。若deg[i]为奇数,无解。
3.设立源点s和汇点t,若某点i入度<出度,连边(s,i,-deg[i]/2),若入度>出度,连边(i,t,deg[i]/2);对于任意定向的无向边(i,j,1)。
4.若有两个度数为奇数的点,假设存在欧拉路径,添加一条容量为1的边,构成欧拉回路,不影响结果。若全为偶数,直接最大流。
5.若从S发出的边全部满流,证明存在欧拉回路(路径),否则不存在。
ps:若要求输出路径,将网络中有(无)流量的边反向,加上原图的有向边,用套圈算法即可。
转自
6.HDU-3315
题意:带预配边的费用流匹配。
同样的费用的时候, 要优先选择预配边。
将边权*最大边权。 然后预匹配边的权值+1。 这样会优先流过来这条边。
7.HDU-4067
题意:给定一副有向图, 有S点和T点, S点的出度=入度+1, T点的入度=出度+1, 其他点的出度==入度。
现在图上的每条边都有保留这条边的权值,代价为a, 删除这条边的权值, 代价为b。
先贪心的保留边/删除边。
1.如果 a >= b, 保留这边, u的出度+1, v的入度+1, add(u, v, 1, b-a)
2.如果 a <= b, 删除这边, add(v, u, 1, b-a).
3.s的入度+1, t的出度+1.
4.然后 S 往 入度-出度>0的点建边, 入度-出度<0的点建边。
5.如果满流说明合法。
8.HDU-3820
题意:给定一个n×m的矩阵, 现在有可以往矩阵里放金蛋 or 银蛋 or 不放蛋, 放了金蛋能得到aij的价值, 放了银蛋能得到bij的价值, 如果有一对金蛋相临就要减去s的价值,如果有一对银蛋相临就减去g的价值,求最大价值。
建边方式:
按奇偶建边。 将点分为奇偶, 然后将拆点分为左右点, 其中对于奇数点来说, S --- (aij) --- 左点 --- (inf) --- 右点 --- (bij) --- T
对于偶数点来说, S --- (aij) --- 左点 --- (inf) --- 右点 --- (bij) --- T。
然后,对于相临的格子来说再把左边的银点往右边的银点建边, 左边的金点往右边的金点建边。
9.HDU-3947
转自:传送门
************
1. HDU 6634