随笔分类 - 最大流
摘要:链接:http://wikioi.com/problem/1035/怎么说呢,只能说这个建图很有意思。因为只有m条道,然后能互相接在一起的连通,对每个点进行拆点,很有意思的一道裸费用留题。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int maxn = 350; 9 const int inf = 10000000; 10 struct node 11 { 12 int u,v,cap,flow,co...
阅读全文
摘要:中文题意不描述。链接:http://wikioi.com/problem/1028/这题一开始很裸的最大权二分匹配。但是原来没有接触过,KM的这个最大权不大会。然后一开始以为用最大费用最大流直接就能搞,后来知道单纯的费用流解决的是二分最佳匹配,而不是最大权,QCMM然后看了一下这个http://hi.baidu.com/lerroy312/item/42e718ba58a1f8df85dd795f结果改了之后不对,不知道为什么最后用的最小费用,对边的权值取负值,结果取负值才过。。。不解。。。 1 #include 2 #include 3 #include 4 #include ...
阅读全文
摘要:题意:有一个n*m的矩阵,告诉了在每一行或者每一列安装大炮的代价,每一个大炮可以瞬间消灭这一行或者这一列的所有敌人,然后告诉了敌人可能出现的L个坐标位置,问如何安置大炮,使花费最小。如果一个敌人位于第r行c列,则他可以被第r行或者第c列的大炮消灭。链接:http://poj.org/problem?id=3308这题突然就让我想起来那个多校的那道多米诺骨牌的那个,几乎一样的模型,还不过要把权值改一下,因为权值是相乘,那么就吧权值改成相加,也就是用log去改变。这样的话 如果坐标为x,y的点要被消灭,那么要么走x要么走y,这样的话就直接是一个二分图的形式了。一边是行,一边是列,用出现的点连边,就
阅读全文
摘要:题意:告诉你一些骨牌,然后骨牌的位置与横竖,这样求最多保留多少无覆盖的方格。这样的话有人用二分匹配,因为两个必定去掉一个,我用的是最小割,因为保证横着和竖着不连通即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define loop(s,i,n) for(i = s;i edges; 14 vectorg[maxn],G[maxn]; 15 void addedge(int u,int v,int cap,int flow) 16 { 17 //printf("********u %d *...
阅读全文
摘要:link:http://acm.upc.edu.cn/problem.php?id=2161这题的大题题意是给你N个多面体,每个多面体的每个面都有字母,然后告诉你几个单词,问你能拼出几个单词。从这道题意不难看出这每个多面体只能每次提供一个字母,也就是说每个多面体预期所带的字母之间所能提供的流量为1 ,不难看出是个二分图,当时用的DFS果断超时,然后想到二分匹配时觉得二分匹配不熟,写了个EK最大流也超市。。。后来回到宿舍敲了一个DINIC果断88ms啊!刚才写了个二分匹配还是超市,不过QC他们的二分过了不知道为什么。。。#include <stdio.h>#include <i
阅读全文
摘要:最近做了一下网络流的题。发现很多题可以转化为网络流,比如地图上的点POJ 3422 和Going Home。最大流的题目真心不能手贱啊,那天一道题跪了一天,晚上才看到写错了一个下标,后来有一道题有看了一晚上一直到2点多,以后没事一定要不数据输出出来,最后输出的时候发现忘了加pop()你这不坑爹吗。今天一直输出忘了return 1= =.哎,说说总结吧1.做过的次数可以化为点之间的容量2.对于走过之后的数据清零比茹3422就可以把拆点,每走到自己的点的时候就把自己和自己连起来,一天有费用的一条没有没用的,有费用的边容量为1;3.重边不能用邻接矩阵。加重边的时候要加费用相同4.注意容量问题,想清楚
阅读全文
摘要:题目连接:http://poj.org/problem?id=2516题意跟题目输入这里写的很明白:http://blog.csdn.net/lyy289065406/article/details/6742534无非就是k种物品,直接对每种物品进行一次最大流就OK了~View Code 1 #include <iostream> 2 #include <queue> 3 #include <iostream> 4 #include <cstdio> 5 #include <cstring> 6 #include <vector
阅读全文
摘要:题目连接:http://poj.org/problem?id=2195题目大意 :题目的意思就是给你一个map然后m代表人,h代表house,一个人只能进入一个house,一个house只能住一个人,问你所以人进入house所能用的最小步数是多少~思路:把man和house分别看做一个集合,这样的话你就可以对每个人和每个house 连接,cao = 1,cost = abs(x1-x2)+abs(y1-y2);然后开一个超级源点就可以了。其实模型就是走多少次就是容量。费用根据题目而定。View Code 1 #include <iostream> 2 #include <cs
阅读全文
摘要:题目连接:http://poj.org/problem?id=3422题目大意:n*N的格子,每个格子上都有数字,从左上角往右下角走,只能往右或者往下走,每走一个格子就加上格子上的分数,走过后格子上的分数为0,走K遍。问能够得到的最大的格子数是多少。这题如果不是做费用流专题真心不会想不到费用最大流。以为是K次,所以可以设容量为K。费用为当前格子的分数。然后因为每个点只记录一次分数,所以,用拆点来处理,用自己和自己连接一下,容量为1,费用为k然后再设一条边容量为K-1次,费用为0;然后就是设超级源点和汇点,容量为K费用为0;我还有一个思路就是每条边的权值都为K,然后找到最大流的时候直接把COST
阅读全文
摘要:题目连接:http://poj.org/submit?problem_id=3281有人所用邻接矩阵会超时。。。然后。。。哥笑了~(*^__^*) 嘻嘻……其实这题我觉得这不超时这题一开始崔老师说把牛放中间我的意思是把人放在最前面,因为如果放在中间1头牛3物三水的话答案就会错误,但是如果把人放在前面感觉又会不大对= =。。然后崔老师就神一般的回答说拆点!顿时天亮了= =。。。其实我真心不知道拆点是神马。。。比赛有一道拆点我枚举匹配一下就过了。。虽然也是拆点的思想= =。。。总之拆点就是为了先吃每个点的出度唯一(个人理解)而做的重复两次操作。博客的上一个acm computer其实就是拆点。。。
阅读全文
摘要:题目连接:http://poj.org/problem?id=3436英语不好,直接在网上搜的题意、、、很详细题意:电脑工厂有N台机器,每台机器对半成品电脑进行加工。每个电脑由P个部件组成,用0和1表示某部件是否已存在(1表示存在了)。每台机器对加工的电脑都是有要求的,只有满足要求,才能进入机器进行加工。机器对电脑部件的要求用0,1,2表示,输入的P个数中,第i个数为ai,ai=0表示该半成品电脑不能有部件i,ai=1表示该半成品必须已有部件i(即1),ai=2表示有没有此部件都无关系。进入机器加工后的电脑出来后所含部件情况用P个数字(0或1)表示。输入:P和N,接下来N行介绍N个机器,第一个
阅读全文
摘要:题目连接:http://poj.org/problem?id=1459题目实在是不好懂,直接在网上搜了好多题解看题意。。。对于多源多汇点的这种直接虚拟一个总会点就OK了。题意:Sample Input2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)207 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7 (3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5 (0)5 (1)2 (3)2 (4)1 (5)4Sample Output1562 1 1 2 (...
阅读全文
摘要:英语不好,懒得看题意,在网上搜的题意题目连接:http://poj.org/problem?id=1273题目大意:每当下雨,农夫FJ最喜爱的养尊处优的地方周围就变成了一个池塘,这让他很不爽,所以决心要把这个问题解决掉,所以他就在四周建造了一些渠沟以便排水,更为巧妙地是可以把这水排到一个小溪处。编号为1的节点作为池塘,编号为n的地方作为小溪。求最大排水量注意重边的情况就可以了;若菜一开始 打的代码没初始化,结果WA最大流基础入门:http://www.cnblogs.com/0803yijia/archive/2013/01/18/2865837.html代码:View Code #inclu
阅读全文
摘要:原文地址:http://blog.sina.com.cn/s/blog_6cf509db0100uy5n.html因为是初学教程,所以我会尽量避免繁杂的数学公式和证明。也尽量给出了较为完整的代码。本文的目标群体是网络流的初学者,尤其是看了各种NB的教程也没看懂怎么求最大流的小盆友们。本文的目的是,解释基本的网络流模型,最基础的最大流求法,即bfs找增广路法,也就是EK法,全名是Edmond-Karp,其实我倒是觉得记一下算法的全名和来历可以不时的拿出来装一装。比如说这个,EK算法首先由俄罗斯科学家Dinic在1970年提出,没错,就是dinic算法的创始人,实际上他提出的也正是dinic算法,
阅读全文

浙公网安备 33010602011771号