网络流
outer_form
OI/ACM
展开
-
【费用流】[BZOJ1070]/[HYSBZ1070]修车
题目 分析:将一个技术人员拆成n个点,分别和车连边,第j个技术人员拆成的第k个点修理第i辆车的费用为k*tm[i][j]. 当一辆车是这个技术人员修理的倒数第k辆车时,它对等待时间的总数贡的献为k*tm[i][j]. 最后,将总数/n即可.#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define原创 2016-01-05 22:12:20 · 545 阅读 · 0 评论 -
【网络流】[Codeforces - 739D]Recover a functional graph
题目大意有一个n个点的有向图,每个点的出度为1。 对于每个点,有两个信息,一个是这个点到环的距离x,一个是这个点能够到达的环的长度y。 有一些点的的某些信息未知,求能否构造出这样一个图。分析对于两个信息都已经知道的点,我们就可以根据这些点来算出我们还需要哪些点。 那些有部分信息未知的点就可以向需求连边,跑网络流。 如果所有需求都能被满足,则有解。 特别地,对于y未知的点,如果原创 2016-12-02 19:16:52 · 682 阅读 · 0 评论 -
【费用流】[CodeForces - 717G]Underfail
题目大意题目大概说给一个主串和几个有价值的模式串,某个模式串与主串匹配就能累加对应的价值,一个模式串可以在多个位置和主串匹配但同一个位置只能一次,此外主串各个字符最多可以用x次,问如何匹配使获得的价值最大。分析暴力匹配模式串在主串中的位置,然后在匹配区间的左端点和右端点+1的地方连一条边,容量为1,费用为匹配这个模式串的收益。 然后在相邻的两个位置之间连边,容量为1,费用为0。跑一次最大费用流即可原创 2016-09-19 11:48:51 · 580 阅读 · 0 评论 -
【费用流+动态加边】[NOI2012]美食节
题目描述DescriptionCZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节。作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴。他很快就尝遍了美食节所有的美食。然而,尝鲜的欲望是难以满足的。尽管所有的菜品都很可口,厨师做菜的速度也很快,小M仍然觉得自己桌上没有已经摆在别人餐桌上的美食是一件无法忍受的事情。于是小M开始研究起了做菜顺序的问题,即安排一个做菜的顺序使得同学们的等待时间最短。原创 2016-07-13 10:29:40 · 690 阅读 · 0 评论 -
【有源汇点上下界最小流】[SGU176]Flow construction
题目 分析:像无源汇点上下界最大流那样建图,然后从SS->ST跑一次,然后t->s连一条容量为+∞的边,跑一次,t->s这条边的流量即为最小流。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define INF 0x7f7f7f7f#define MAXN 100using namespace s原创 2016-01-20 21:33:01 · 438 阅读 · 0 评论 -
【有源汇点上下界最大流】[ZOJ3229]Shoot the Bullet
题目: 大意:有一个人,去给m个女孩儿拍照,第i个女孩至少拍Gi张,第k天最多拍Dk张,需要给Ck个女孩拍照,分别是Tk1, Tk2, …, TkCk,每个女孩至少Lki张,最多Rki张。做法:就像无源汇点上下界最大流那样连边,最后从T到S连一条下届为0,上届为+∞的边即可。#include<cstdio>#include<cstring>#include<algorithm>#define原创 2016-01-18 13:14:56 · 425 阅读 · 0 评论 -
【分治最小割】[CQOI2016]不同的最小割
题目描述分析一下所称的两点之间的最小割是指以其中一点为源点,另一个点为汇点的最小割,因为是无向图,交换源点、汇点之后最小割的值不变暴力的做法枚举点对,求出所有点对的最小割,然后全部排序看有多少个不同的值。在暴力的基础上优化我们能不能更快地求出所有点对的的最小割呢?分治最小割引入根据一些结论,最小割最多有n-1个,这n-1个最小割构成一个最小割树(我也不知道为什么) 然后,就可以分治求最小割了做法当原创 2016-04-10 20:26:43 · 1897 阅读 · 0 评论 -
【网络流+线段树】[CQBZOJ3065]生死游戏((A+B)^2 Problem)
题目题目描述 有些邪恶富人们喜欢玩生死游戏。简单的说就是找一些穷人,让他们进行相互厮杀。富人们则在旁观看并下注。 今天的游戏跟以往有些不同。参与游戏的穷人排成了一个n*m的矩阵,你的任务是组织游戏并决定这些人的生死。 如果第i行,第j列的人幸存了下来,你将获得Wij块钱,否则你将得到Bij块钱。 同时,富人们会提出一些奇怪的要求。他们每个人都会指定一个子矩阵,然后说:如果这个子矩阵的所有穷人原创 2016-03-11 16:49:07 · 1259 阅读 · 1 评论 -
【无源汇点上下界可行流】[SGU194]Reactor Cooling
题目#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define MAXN 200#define MAXM MAXN*MAXN#define INF 0x7f7f7f7fusing namespace std;deque<int>q;void Read(int &x){ char c;原创 2016-01-12 14:15:11 · 536 阅读 · 0 评论 -
【网络流+可持久化线段树】[UOJ#77/BZOJ3218]A+B Problem
题目题目链接UOJ#77 BZOJ3218题目描述 分析感谢VFleaKing的博客中的讲解和geng4512的博客中的代码,涨了不少知识。网络流的做法首先我们来看看答案是怎么得到的 ans=∑ii是白色wi+∑ii是黑色bi−∑ii很奇怪pians=\sum_{i}^{i是白色}w_i+\sum_{i}^{i是黑色}b_i-\sum_{i}^{i很奇怪}p_i 我们转化一下这个等式 an原创 2016-03-10 16:03:08 · 1947 阅读 · 1 评论 -
【图论】【二分图匹配】[HDU2819]Swap
题目 分析:在对角线上全是1,逆向思考这个问题,将对角线上的1回到他们原来的地方后,发现这些1中没有任何两个在同一行或同一列,也就是这个图是一个置换矩形。 将每一行,每一列编号,分别作为x部和y部,将1所在的行列连边,求最大匹配。 至于输出方案,匹配完了之后,枚举每一行(或列,下同),将这一行的1置换到对角线上去即可。代码:#include<cs原创 2015-08-26 20:18:13 · 644 阅读 · 0 评论 -
最大流Sap模板
int dfs(int u,int augu){ int augv=0,v,delta,mind= n-1; if(u==T) return augu; for(v=S;v<=T;v++) if(cap[u][v]>0){ if(dist[u]==dist[v]+1){ delta=min原创 2015-08-26 20:18:46 · 425 阅读 · 0 评论 -
【图论】[二分图匹配] 模板
bool dfs(int u){ for(node *p=adj[u];p;p=p->next){ if(vis[p->v]) continue; vis[p->v]=1; if(!c[p->v]||dfs(c[p->v])){ c[u]=p->v; c[p->v]=u;原创 2015-08-26 20:16:48 · 439 阅读 · 0 评论 -
【费用流】[BZOJ1061]/[HYSBZ1061]志愿者招募
题目 分析:建图的方法还是比较难想。 首先,计算两个相邻时刻的差分,若a[i]#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define MAXN 1000#define MAXM 10000#define INF 0x7f7f7f7f7f7f7f7fllusing namespace std原创 2016-01-05 22:05:39 · 89 阅读 · 0 评论 -
【暴力/网络流】[Codeforces - 739E]Gosha is hunting
题目大意有n个口袋妖怪,a个精灵球,b个超级球,抓住第i个口袋妖怪的几率分别为pip_i和uiu_i,对于每个口袋妖怪,每种球最多只能使用1个,你必须在一开始就决定丢球的方案,使得抓住的口袋妖怪的数量最大。分析费用流对于每个口袋妖怪,如果只扔一个球,那么收益就是pi p_i或者qiq_i,如果两球都扔,收益就是分别扔两球的和减去pi×qip_i \times q_i,原创 2016-12-27 14:40:36 · 4180 阅读 · 0 评论