图论-网络流
Nemaleswang
ACM退役狗一只
展开
-
hihocoder 1378 网络流二·最大流最小割定理
题目链接:网络流二·最大流最小割定理题目大意:给你一张有向图,算最小割,最小割集的点数个数和个数编号题目思路:跑一边最大流可以得到最小割,这个是显而易见的,要找最小割集,我们只需要最后再跑一遍BFS就好了,这个时候一定是找不到增广路的,所以这时候访问到的点就是最小割集了,记录一下就好了#include <map> #include <set> #include <cmath> #include <q原创 2017-09-05 17:02:33 · 394 阅读 · 0 评论 -
hdoj 1533 && poj 2195 Going Home
题目连接:Going Home题目大意:现在有一张图,有n个房间和n个人,现在每个人移动的代价是1,只能上下左右移动,不能有相同的人在一个房间,问所有的人都进入房间的最小花费是多少题目思路:这种有限制而且还有花费的,我们不妨转化为最小费用最大流,我们用一个超级源点连接所有的人,容量为1,单位花费为0,然后用一个超级汇点被所有的房间连接,容量为1,单位花费为0,然后每个人和所有房间相连,容量为1,单位原创 2017-09-06 17:31:50 · 288 阅读 · 0 评论 -
poj 3068 "Shortest" pair of paths
题目连接:“Shortest” pair of paths题目大意:给你一个有向图,有边权,现在需要你找出两条从0到n-1的路径并且两条路径无公共点而且需要使得边权和最小,不存在输出No possible,存在输出两条路径的边权和题目思路:这题我们可以想到去跑网络流,然后看最大流是不是2,我只给2的流量从超级源点流出,为了方便起见,我们将所有点位置加1,变成求1到n的最小费用最大流,超级源点为0,连原创 2017-09-06 18:00:16 · 346 阅读 · 0 评论 -
hdoj 5988 Coding Contest
题目链接:Coding Contest题目大意:有n个区域和m条路,每个区域有a[i]个人和b[i]个食物,然后是m条路连接两个区域,这条路容量为cap,这条路断掉的概率为p,第一个经过的时候一定不会断,后面的人有概率p会断,现在需要所有人都吃上饭并且破坏网络的概率最小题目思路:我们是不能直接算破坏网络的,破坏了会对网络流产生影响,所以我们需要去算不能破坏的概率,我们知道一条路里面都不被破坏的概率是原创 2017-09-06 20:22:00 · 634 阅读 · 0 评论 -
hdoj 3549 Flow Problem
题目链接:Flow Problem题目大意:给你一张有向图,问你这张图从1到N的最大流题目思路:直接套板子写最大流就好了#include <map> #include <set> #include <cmath> #include <queue> #include <stack> #include <vector> #include <cstdio> #include <cstring> #incl原创 2017-09-01 19:33:35 · 272 阅读 · 0 评论 -
hdoj 3572 Task Schedule
题目链接:Task Schedule题目大意:有n个任务和m个机器,一个任务需要ti的时间,只能从第s天开始,必须在第e天之前结束,问能不能把所有的任务都做完题目思路:我们可以想到去建网络流,建一个超级源点0,然后第i个任务为点i,连接他和源点,容量为任务需要的天数(流出去的量嘛),然后每个任务和他的天数集合(从起点到终点)相连,容量为1,然后所有的天数和总计汇点连接,容量是m(最多只有m个机器嘛,原创 2017-09-01 20:00:47 · 318 阅读 · 0 评论 -
计蒜客 16959 Our Journey of Dalian Ends(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 J)
题目链接:Our Journey of Dalian Ends题目大意:一张无向图,每两个城市之间有一条花费为cost的双向边,现在问能不能从西安到大连,途径香港,如果可以,输出最小花费,否则输出-1题目思路:题目可以转化为从源点连接西安和大连,汇点上海,最大流量是否为2,是的话求最小费用最大流,把每个点都拆成两个点x⋅,xx^·,x,x⋅,xx^·,x之间的容量为1,费用为0(为上海的时候需要注意原创 2017-09-20 18:03:54 · 426 阅读 · 0 评论 -
hdoj 6214 Smallest Minimum Cut
题目链接:Smallest Minimum Cut题目大意:给你一张图,问最小边数的最小割是多少题目思路:跑网络流,最小流可能会有很多歌,所以我们需要做的是扩大每条边的容量,我们把容量扩大m+1倍,因为我们扩展后会把每条边的容量再加一,最多m条边,所以扩大m+1是没有问题的,这样扩展后边容量其实没变化,但是最后加的1对边的个数形成了冲击,最后我们找出加了多少个一的最小割就好了,也就是对(m+1)取余原创 2017-10-07 20:34:00 · 257 阅读 · 0 评论