随笔分类 -  网络流

摘要:#include #include #include using namespace std;const int N=500;const int MAXE=20000000;const int inf=10&&d[u]+edge[j].w=k) { ans+=(k... 阅读全文
posted @ 2014-03-24 14:17 贝尔摩德 阅读(110) 评论(0) 推荐(0)
摘要:题意 二维空间上有一些点,每个点有一个半径r和频率f,要从某一个点S走到另一个点T,然后再从T回到S。从S到T时,如果两个点表示的圆相交并且第一个点小于第二个点的频率的,那么能从第一个点到第二个点,从T到S时,第一个点的频率要大于第二个点的频率。除了S和T,每个点走后就会消失,问是否存在一种走法。相... 阅读全文
posted @ 2014-03-20 17:32 贝尔摩德 阅读(167) 评论(0) 推荐(0)
摘要:#include #include #define M 310#define inf 0x3f3f3f3fint n,nx,ny;int link[M],lx[M],ly[M],slack[M]; //lx,ly为顶标,nx,ny分别为x点集y点集的个数int visx[M],visy[M],... 阅读全文
posted @ 2014-03-15 21:55 贝尔摩德 阅读(125) 评论(0) 推荐(0)
摘要:将一个无向图删边得到一些子图,并使每个子图中存在哈密顿回路,并使所有哈密顿回路上边的权值最小。因为是哈密顿图,所以每个点入度和出度必须为1,将每个点拆成u,u',对于边,连接边,,KM即可。#include #include #define M 1100#define inf 1000000int ... 阅读全文
posted @ 2014-03-15 21:43 贝尔摩德 阅读(186) 评论(0) 推荐(0)
摘要:题目大意是有n个点,m条边,每条边有一个权值,问将所有点划分为圈的最小花费(每个点都在且仅在一个圈上)。因为每个顶点只出现一次,那么每个顶点只关联两个顶点入度顶点和出度顶点,所以构造二分图,将一个点u拆成u,u'。那么对于这个二分图如果存在着完美匹配的话,那么原图中一定存在若干个环,环中包含每个顶点... 阅读全文
posted @ 2014-03-14 12:59 贝尔摩德 阅读(137) 评论(0) 推荐(0)
摘要:在无向图上求s到t最短路径的条数且最短路径间不能有重边(即弱独立轨)#include #include #include #include using namespace std;#define maxn 2100#define INF 100000struct node{ int u,v,d... 阅读全文
posted @ 2014-03-13 11:18 贝尔摩德 阅读(140) 评论(0) 推荐(0)
摘要:以电影为x节点,天数为y节点,如果电影a需在w周之前完成,那么连接该电影节点到前w周能去的那几天,容量为1,源点s点连接每个电影节点,容量为该电影需要去的天数,每一天连接汇点 t ,容量为1,表示每天只能去一个,求最大流,如果最大流等于所有应去的天数,则输出yes,否则no。#include #in... 阅读全文
posted @ 2014-03-10 23:16 贝尔摩德 阅读(138) 评论(0) 推荐(0)
摘要:两道题目十分类似,只是数据量问题,都可以用费用流来解,所以只贴前一道题的代码了,从右下往左上等效从左上往右下,因此即相当于走两次,建图方式同poj3422。#include #include #include using namespace std;const int N=2000;const in... 阅读全文
posted @ 2014-01-11 21:12 贝尔摩德 阅读(161) 评论(0) 推荐(0)
摘要:题意:在一个矩阵中每个格子上都有一个非负数,卡卡的一次旅行是从矩阵的左上角移到右下角,并将他走过的格子中的数字累加,并且走过的格子中的数字变为0,问经过k次这样的旅行最多可得到多大的数字。费用流,将每个方格拆成两个点,中间连接一条容量为1的费用为该格子数字的相反数,再连接一条容量为无穷费用为0的路径... 阅读全文
posted @ 2014-01-11 21:03 贝尔摩德 阅读(158) 评论(0) 推荐(0)
摘要:将人拆点,之间连接一条容量为1的边,表示一个人只能选一次,从s到每种食物连接一条容量为该种食物总数的边,从每种饮料连接一条容量为该种饮料总量的边,如果一个人喜欢某种食物或饮料,连边即可。#include #include #include using namespace std;const int ... 阅读全文
posted @ 2013-12-22 21:23 贝尔摩德 阅读(98) 评论(0) 推荐(0)
摘要:注意一个地方,在建立好层次图进行dfs增广时,如果某个点增广不出流量,那么将该点level值置为0,即将它在该层次图中删除,剪枝,否则会超时~#include #include #include using namespace std;const int maxn=1050;#define inf ... 阅读全文
posted @ 2013-12-20 16:18 贝尔摩德 阅读(161) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;#define Max 230#define INF 100000000int flow[Max][Max],d[Max];int vis[Max*3];int sta,end; vector sum;i... 阅读全文
posted @ 2013-12-12 17:12 贝尔摩德 阅读(127) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std;const int maxn=20000+50,inf=100000000;int n,m;int level[maxn],que[maxn*10];int head[maxn*3],lon;int min... 阅读全文
posted @ 2013-12-12 17:00 贝尔摩德 阅读(103) 评论(0) 推荐(0)