网络流
Jiahe Xu
为何要去攀登珠穆朗玛峰,因为她就在那里啊.
展开
-
poj1637 Sightseeing tour dinic
直接借用讲义。。。【题目大意】混合图欧拉回路。(1 【建模方法】把该图的无向边随便定向,计算每个点的入度和出度。如果有某个点出入度之差为奇数,那么肯定不存在欧拉回路。因为欧拉回路要求每点入度 = 出度,也就是总度数为偶数,存在奇数度点必不能有欧拉回路。好了,现在每个点入度和出度之差均为偶数。那么将这个偶数除以2,得x。也就是说,对于每一个点,只要将x条边改变方向(入>出就是变入原创 2014-11-18 21:38:17 · 495 阅读 · 0 评论 -
wikioi1033 蚯蚓的游戏问题
第一次写网络流的拆点问题,本题可以原创 2014-06-09 19:13:39 · 769 阅读 · 0 评论 -
bzoj1565: [NOI2009]植物大战僵尸 最小割
若a保护b,则a向b连边发现保护关系若形成环,则环以及环间接保护都不可攻击删去这些点,然后就是最大权闭合子图模型若v[x]x 权-v[x]否则 x-T 权v[x]若a保护b则 a-> b 权inf答案是正权和-flow#include #include #include #include #include #include #incl原创 2015-01-04 21:02:18 · 1123 阅读 · 0 评论 -
bzoj1066: [SCOI2007]蜥蜴 最大流
对于每根石柱,采取一分为二的想法,即把一个点分为两个点(可抽象为石柱底部到顶部),其连线容量限制为石柱高度。超级源与所有有蜥蜴的点相连,容量为1。超级汇与地图内所有能跳出的点相连,容量为INF。对于地图内任意两个石柱,如果间距小于d,就将其中一根石柱的顶部与另一根石柱的底部相连,其连线容量为INF。构图完成,剩下就是跑一遍最大流,然后用蜥蜴数量减去最大流就是最终结果原创 2014-12-08 23:39:11 · 555 阅读 · 0 评论 -
bzoj1059: [ZJOI2007]矩阵游戏 二分图
简单二分图,把行和列看做两个几何,分别连边即可。第一发竟然搞错入度了,可惜没有1A,#include #include #include #include #include #include using namespace std;#define INF 0x3fffffff#define maxn 800typedef long long sint;struct node{原创 2014-12-19 17:23:58 · 556 阅读 · 0 评论 -
bzoj3144: [Hnoi2013]切糕 DINIC最小割
很容易想到把每对相邻两层的对应点连容量为C(不和谐值)的边。对于条件高度差不超过d,对于最小割的模型,我们可以想到所有限制流量的边可以抽象在同一层中。若当前边选作了最小割的一个边,那么这个点往下的点(对于第i层往后的点)都是摆设,而最小割的这一层不能断,所以向与当前点层数差为d的点连容量为INF的边。#include#include#include#include#includ原创 2014-11-25 22:11:02 · 742 阅读 · 0 评论 -
bzoj1070: [SCOI2007]修车 费用流
一开始想的是用一种限流的费用流,然后yy了许久没有想出来。正解是将n个点分成m层(I,J)间有N条边,表示第J辆车是第I个人倒数第K次处理的。由于是倒数第k次,所以前面第I个人买没修车的人等了k*save[I][J]分钟。#include #include #include #include #include using namespace std;#define MAXN原创 2014-11-28 23:25:24 · 560 阅读 · 0 评论 -
ZOJ 1654 Place the Robots DINIC
题意:一个n*m地图,*代表草地,#代表墙,o代表空地,要再图中的o处放机器人,机器人可以攻击(上下左右)4个方向,攻击范围无限长,而且机器人不能相互攻击,草地不能放置机器人,且机器人的攻击可以穿过草地,但是机器人的攻击不能穿过墙,比如 “ *o#o ”这一行就可以放两个机器人,” o*oo “ 这一行就只能放一个,问最多能放多少个机器人?思路:采用分块的思想进行建图,什么是块?联系原创 2014-11-21 19:06:36 · 536 阅读 · 0 评论 -
LA 6234 Tile Cut dinic
蛋疼的输入。。。。。原创 2014-11-22 15:53:22 · 668 阅读 · 0 评论 -
zoj2760 How Many Shortest Path dinic 最大流
这个本来很简单,注意floyd要这样写:for(int k=1;k for(int i=1;i for(int j=1;j { if(dist[i][k] dist[i][k] + dist[k][j]) dist[i][j] = dist[i][k] +原创 2014-11-26 20:52:04 · 469 阅读 · 0 评论 -
bzoj1497: [NOI2006]最大获利 DINIC
【建模方法】注意到题目中加粗的两个字“必须”,此题是典型的“蕴含式最大获利问题”,套用解决最大权闭合子图的建模方法即可解决。每个项目i作为一个点并连边(s, i, Ai),每名员工j作为一个点并连边(j, t, Bj),若项目i需要雇用员工j则连边(i, j, ∞)。设最小割为ans,那么ΣAi-ans即为结果。#include#include#include#include#incl原创 2014-11-25 12:52:08 · 1648 阅读 · 0 评论 -
poj2931 Ombrophobic Bovines dinic
坑点:答案很大会爆int 细节点很多,二分原创 2014-11-18 16:56:40 · 630 阅读 · 0 评论 -
wikioi1237 餐巾计划问题
费用流。把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T。1、从S向每个Xi连一条容量为ri,费用为0的有向边。2、从每个Yi向T连一条容量为ri,费用为0的有向边。3、从S向每个Yi连一条容量为无穷大,费用为p的有向边。4、从每个Xi向Xi+1(i+15、从每个Xi向Yi+m(i+m6、从每个Xi向Yi+n(i+n求网络最小费用最大流,费用流值就是要求原创 2014-07-07 22:28:30 · 810 阅读 · 0 评论 -
poj1149 PIGS DINIC
题意: 有 M 个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了 N 个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。分析: 此题是网络流,网络流里经典的构图题。将顾客看作除源和汇以外的节点,源和每个猪圈的第一个顾客连边,边原创 2014-11-16 21:52:31 · 539 阅读 · 0 评论 -
poj3281 Dining Dinic
由于牛只能选一次,所以对牛进行拆点。原创 2014-11-17 19:01:25 · 463 阅读 · 0 评论 -
LA6266 Admiral 费用流
直接最大流。。。。由于只用找两条路径,spfa跑两次就可以了。#include #include #include #include #include using namespace std;#define MAXN 310000#define MAXM 310000#define INF 0x3f3f3f3fstruct node{ int u,v,f,c,next;原创 2014-11-25 20:56:43 · 571 阅读 · 0 评论