
网络流
zhouyuyang233
此乃ZJ之蒟蒻也
望大牛勿喷
我等蒟蒻感激不尽
展开
-
bzoj1061: [Noi2008]志愿者招募
传送门 思路:例如一共需要4天,四天需要的人数依次是4,2,5,3。有5类志愿者,如下表所示: 设雇佣第i类志愿者的人数为X[i],每个志愿者的费用为V[i],第j天雇佣的人数为P[j],则每天的雇佣人数应满足一个不等式,如上表所述,可以列出P[1]=X[1]+X[2]>=4P[2]=X[1]+X[3]>=2P[3]=X[3]+X[4]+X[5]>=5P[4]=X[5]>=3对于第i个不等式,添原创 2017-03-13 15:52:06 · 379 阅读 · 0 评论 -
bzoj1305: [CQOI2009]dance跳舞
传送门 拆点网络流+二分答案。 将每一个人拆成ix和iy 如果男女互相喜欢,则在x节点之间加边。 否则在y节点之间加边。(边权为1) 然后男生从x连向y,女生从y连向x,连流量为k的边。 从原点向男生的x节点连流量为a的边。 从女生的x节点向汇点连流量为a的边。 然后二分答案a,判断是否满足n*a==maxflow即可。#include<cstring> #include<cma原创 2017-04-22 17:23:51 · 394 阅读 · 0 评论 -
bzoj1339: [Baltic2008]Mafia
传送门 这么裸的网络流你还看不出来吗?#include<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#define N 100005#define inf 1e9using namespace std;int n,m,S,T,tot=1,a原创 2017-05-24 20:30:04 · 452 阅读 · 0 评论 -
bzoj1565: [NOI2009]植物大战僵尸
传送门 这道题吃到某个植物a可能需要先吃掉别的植物b(在他的右边或者保护着他),那么我们把a连向b。 发现这是最大权闭合子图。 显然是可以通过网络流水过的。 闭合子图: V中顶点的所有出边均指向V内部顶点 那么按照最大权闭合图的建图方法: 1.s向正权点连流量为权值的边 2.负权点向t连流量为权值的绝对值的边 3.有边相连的两点连流量为inf的边 答案就是正权点的权值总和减去最小原创 2017-05-05 15:55:39 · 318 阅读 · 0 评论 -
bzoj1532: [POI2005]Kos-Dicing
传送门 网络流模板+二分验证。 S->比赛 1 比赛->参加比赛的人 1 每个人->T inf 判断最大流是否是m即可。#include<cmath>#include<cstdio> #include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#define N 10005using names原创 2017-06-02 21:43:16 · 265 阅读 · 0 评论 -
bzoj1822: [JSOI2010]Frozen Nova 冷冻波
传送门 先用计算几何判断某个巫师是否能够施法到某个小精灵。 然后二分答案,用网络流验证就可以了。#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#define eps 1e-10#define inf 0x3f3f3f3f#d原创 2017-06-21 21:14:08 · 232 阅读 · 0 评论 -
bzoj1797: [Ahoi2009]Mincut 最小割
传送门 显然先跑一遍网络流。 在残余网络上跑tarjan求出所有SCC, 记id[u]为点u所在SCC的编号。显然有id[s]!=id[t] ①对于任意一条满流边(u,v),(u,v)能够出现在某个最小割集中,当且仅当id[u]!=id[v]; ②对于任意一条满流边(u,v),(u,v)必定出现在最小割集中,当且仅当id[u]==id[s]且id[v]==id[t]。①<==将每个SCC缩原创 2017-06-12 21:18:11 · 234 阅读 · 0 评论 -
bzoj1834: [ZJOI2010]network 网络扩容
传送门 第一问直接网络流爆过去。 第二问: 在处理完第一问的参量网络上加上流量为inf,费用为w的边。 直接跑最小费用最大流不虚。#include<cstdlib> #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring>using namespac原创 2017-06-23 21:24:39 · 271 阅读 · 0 评论 -
bzoj1934: [Shoi2007]Vote 善意的投票
传送门 看到假题,我们就应该想到网络流。 从S向不睡的人连单向边,流量1 从睡的人向T连单向边,流量1 每对朋友之间连双向边,流量1 大力最小割一发就可以了。#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cstdlib>#define i原创 2017-07-23 17:21:45 · 347 阅读 · 0 评论 -
bzoj1324: Exca王者之剑
传送门 将图染色后大力跑最小点权点覆盖(四个方向) 答案=总权值-最小点权点覆盖。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 10010#define inf 1e9using namespace st原创 2017-05-23 21:31:22 · 307 阅读 · 0 评论 -
bzoj1322: Zju2429 Destroying The Graph
传送门 网络流一眼题。 点i拆为i和i’ s->i cap=Wi- i’->t cap=Wi+ 原图中的有向边u,v u->v’ cap=inf 最小割显然#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define原创 2017-05-23 21:27:59 · 316 阅读 · 0 评论 -
bzoj1570: [JSOI2008]Blue Mary的旅行
传送门 显然网络流水题。 显然我们听该按照天数将图分层, 每一天分作一层,每一层的点向下一层连边 从源点向第0层的1号点连边 每层的n向T连inf的边 从1开始枚举天数,每多一天就多建一层然后跑最大流. 如果最大流=T则输出答案 由于1~n的路径长度不会超过n, 因此T个人排队走这条路径总天数不会超过T+n 故只需要建n+T层即可出解,网络流可以跑出来#include<cstri原创 2017-05-10 20:50:46 · 495 阅读 · 0 评论 -
bzoj1066: [SCOI2007]蜥蜴
传送门 网络流模板题。 首先将一个点拆成两个,中间连一条流量为高度的边。 然后从超级原点连向每一个蜥蜴,流量为1 从每一个可以跳出去的点想超级汇点连一条流量为inf的边。 在矩阵中每两个互相可以到达的点连一条流量为inf的边。 跑一遍最大流即可。#include<cstring> #include<cmath> #include<cstdio> #include<iostr原创 2017-03-13 20:09:43 · 298 阅读 · 0 评论 -
bzoj1070: [SCOI2007]修车
传送门 网络流。 把每个工人拆成N个点。记为A[i,j]表示第i个工人修倒数第j辆车。 每个车跟所有N*M个工人拆出的点连边。流量为1,费用为time[i,j]*k。 源和每辆车连边,N*M个点和汇连边,流量都为1,费用同为0。 考虑第i个工人,他修第j辆车只对后面要修的车有影响,而前面修过的车已经对当前没有影响了。 而这个影响就是后面每个将要修理的车都多等待了time的时间。 其他边原创 2017-03-16 11:15:41 · 301 阅读 · 0 评论 -
bzoj1221: [HNOI2001] 软件开发
传送门 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T。 1、从S向每个Xi连一条容量为ri,费用为0的有向边。 2、从每个Yi向T连一条容量为ri,费用为0的有向边。 3、从S向每个Yi连一条容量为无穷大,费用为p的有向边。 4、从每个Xi向Xi+1(i+1<=N)连一条容量为无穷大,费用为0的有向边。 5、从每个Xi向Yi+m+1(i+m+1<=N)连一条容量为无穷大,原创 2017-04-11 15:48:19 · 398 阅读 · 0 评论 -
bzoj1189: [HNOI2007]紧急疏散evacuate
传送门 对于每个门进行一次bfs,得出每个点到每个门的时间 然后二分时间,每次建图dinic S到空地连一条容量1的边,每个空地到可到达的门连一条容量1的边,每个门到T连一条容量为时间的边。 网络流水过。#include<cstdio>#include<cmath>#include<ctime>#include<cstring>#include<iostream>#include<原创 2017-04-02 15:53:30 · 409 阅读 · 0 评论 -
bzoj1412: [ZJOI2009]狼和羊的故事
传送门 显然可以用最小割艹过去。 从源点向所有狼连一条∞的边,从所有羊向汇点连一条∞的边,这样就能保证狼和羊都在不同的点集里。然后再从狼到相邻的羊和空地,空地到相邻的空地和羊连一条流量为1的边,最大流求最小割即可。#include<cstring> #include<cmath> #include<cstdio> #include<iostream> #include<cstd原创 2017-04-29 14:41:05 · 253 阅读 · 0 评论 -
bzoj1433: [ZJOI2009]假期的宿舍
传送门 显然网络流呀。 源点向所有有床位的连边 需要床位的向汇点连边 如果i可以睡j的床,i向j‘连边 裸题呀。#include<cstring>#include<cmath> #include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm>#define inf 2100000000原创 2017-04-29 21:07:42 · 251 阅读 · 0 评论 -
bzoj1449: [JSOI2009]球队收益
传送门 感觉就是费用流呀。 可以发现这道题与之前的费用流题有所不同,因为一个球队不论输还是赢都会获得收益。 这里就要用到一个技巧,我们可以假装比赛双方都输,然后修改赢的就ok辣。 然后就是每个人向终点连边,这里的费用随着流量的变化而变化,所以我们要用到拆边法。考虑一个人从赢win[i]次、输lose[i]次变为赢(win[i]+1)、输(lose[i]-1)次,总费用的变化量为c[i](wi原创 2017-04-30 21:14:26 · 295 阅读 · 0 评论 -
bzoj1266: [AHOI2006]上学路线route
传送门 先跑一发最短路,求出有用边, 然后就是裸的网络流了。#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define inf 1e9#define ll long longusing namespace std;struct data{ int原创 2017-04-15 07:35:53 · 468 阅读 · 0 评论 -
bzoj1340: [Baltic2007]Escape逃跑问题
传送门 我们大力拆点,在相邻两个距离小于等于200的点连边 然后S向离上边界小于等于100的点连边 离下边界小于等于100的点向T连边 大力最小割一点不虚。#include<bits/stdc++.h>#define N 505using namespace std;int head[N],q[N],dis[N];int tot=1,l,w,n,S,T,ans;struct edg原创 2017-07-28 21:22:36 · 483 阅读 · 0 评论