随笔分类 - 网络流
摘要:http://www.cnblogs.com/looker_acm/archive/2010/08/15/1799919.html/*** 混合图欧拉回路** 只记录各定点的出度与入度之差,有向边无用丢弃,将无向边定向,在网络中建立流量为1的边** 另新建s和t。对于入 > 出的点u,连接边(u, t)、容量为x,对于出 > 入的点v,连接边(s, v),** 容量为x(注意对不同的点x不同)。之后,察看是否有满流的分配,如果是满流则存在,否则不存在*/#include #include #include #include #include using namespace std;
阅读全文
摘要:#include #include #include #include #include using namespace std;const int maxn = 1000;const int maxm = 100000;const int inf = 10000000;struct node{ int v,flow,next;}edge[maxm];int head[maxn],dis[maxn];int id,s,t,n,m;void add_edge(int u,int v,int flow){ edge[id].v = v;edge[id].flow = flow;edge...
阅读全文
摘要:由于被小孩子不喜欢的糖果的对小孩产生的效力是一样的,所以我们在网络流的时候先不考虑。1 - 源点0到1~N个糖果,容量为1,费用为02 - 根据like数组,like[i][j] == 1时在糖果j和人N+i之间建立有一条边,容量为1,费用为03*- 根据b[i]和K的值建立小孩和汇点之间的边:如果b[i] 是 K 的倍数, 说明花费b[i] / K个喜欢的糖果可以达到b[i],建立一条边,费用为K,容量为b[i] / K;否则,将这条边拆为两部分,第一部分是b[i] / K的部分,第二部分根据b[i] % K的部分。(如果b[i] % k == 0,说明b[i]是k的倍数;若b[i]...
阅读全文
摘要:/*** 无向图拆点,求最大流,最大流即为割点个数。*/#include #include #include #include #include using namespace std;const int maxn = 410;const int maxm = 100100;const int INF = 200000000;struct node{ int v,flow,next;}edge[maxm];int head[maxn],dis[maxn],aug[maxn];int n,m,s,t,id;void add_edge(int u,int v,int flow){ e...
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2485题目要求:删除最少的点,使得源点到汇点的距离大于k思路:拆点、建图求费用小于等于k的最大流#include #include #include #include #include using namespace std;#define min(x,y) (x)que; que.push(source); while( !que.empty()){ int u = que.front(); que.pop(); vis[u] = 0; ...
阅读全文
摘要:#include #include #include #include #include using namespace std;const int maxm = 50000*4;const int maxn = 110;struct node{ int v,cost,flow,next;//v表示指向的下一个顶点,a表示系数,flow表示可以过的流量}edge[maxm];int head[maxn],dis[maxn],pre[maxn],cur[maxn],vis[maxn],aug[maxn];int s,t,v,n,m,k,id,flow;void add_edge(int u...
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1569题解:因为这个数据比较大,所以用动态规划会超时。将图转换成黑白棋盘问题,i + j 为奇数的与s节点相连,边的权值为棋盘上对应位置的值,其他的与t节点相连,边的权值为棋盘上对应位置的值,然后让棋盘上相邻之间的节点用边相连,边的权值为INF。这样问题就转换为了最大点权独立集问题。定理:1、最大点权独立集 = sum - 最小点权覆盖集。2、最小点权覆盖集 = 最小割 = 最大流dinic实现:#include #include #include #include #include using n
阅读全文
摘要:【关键字】0/1分数规划、最优比率生成树、最优比率环 【背景】根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧。自己总结了一些这种问题的解法,因为水平有限,如果有错误或是麻烦的地方,尽管喷,邮箱或是下方留言。 联系我的话perseawe@163.com,欢迎讨论,请在标题前注明[acm]或是[oi],以免被垃圾邮件。【知识储备】只会用到简单的公式的整理与变形,还有求和sigma。【定义】01分数规划问题:所谓的01分数规划问题就是指这样的一类问题,给定两个数组,a[i]表示选取i的收益,b[i]表示选取i的代价。如果选取i,定义x[i]=1否则
阅读全文
摘要:最近又复习了下最大流问题,每次看这部分的内容都会有新的收获。可以说最大流问题的资料网上一搜一大把,根本没有必要自己写;但是大部分资料上的专业术语太多了,初学很难理解,至少我当年学这部分的时候前几次就没有看懂。所以我准备备份一点个人的理解。图-1如图-1所示,在这个运输网络中,源点S和汇点T分别是1,7,各边的容量为C(u,v)。图中红色虚线所示就是一个可行流。标准图示法如图-2所示: 其中p(u,v) / c(u,v)分别表示该边的实际流量与最大容量。关于最大流熟悉了什么是网络流,最大流也就很好理解了。就是对于任意的u∈V-{s},使得p(s,u)的和达到最大。上面的运输网络中,最大流如图-3
阅读全文
摘要:本沙茶今年AHOI的时候,遇到裸的最佳匹配的题,竟然把KM算法搞忘了,幸亏是WJMZBMR神犇保佑,临时乱弄一通,想起来了……这MS反映出了本沙茶以前在看某些经典算法的时候看得不深,木有理解透彻……前几天又遇到一道最佳匹配的题,发现KM算法竟然又忘了……米办法,只有把这个搞死人的算法的具体过程重新看了一遍,终于懂了……【KM算法及其具体过程】(1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j, W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j, W),称
阅读全文

浙公网安备 33010602011771号