题目描述 输入 输出 如果有可行解, 输出最小代价,否则输出NIE. 样例输入 5 1 1 2 3 1 1 5 1 3 2 5 5 4 1 5 10 3 3 3 1 样例输出 9 题解 费用流 设xi表示学生,yi表示编号,那么S->xi,容量为1,费用为0:xi->能够使得xi接受的yj,容量为1,费用为按照题目中计算出来的相应费用:yi->T,容量为1,费用为0. 然后跑最小费用最大流即可. #include <cstdio> #include <cstring&g…
P3440 [POI2006]SZK-Schools 每所学校$i$开一个点,$link(S,i,1,0)$ 每个编号$j$开一个点,$link(i,T,1,0)$ 蓝后学校向编号连边,$link(i,j,1,val)$ 最后跑一遍费用流 如果没有满流就是$NIE$ 否则就是最小代价了 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace s…
[POI2006]Szk-Schools Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 743  Solved: 381[Submit][Status][Discuss] Description Input Output 如果有可行解, 输出最小代价,否则输出NIE. Sample Input 5 1 1 2 3 1 1 5 1 3 2 5 5 4 1 5 10 3 3 3 1 Sample Output 9 HINT   考虑数据范围应该就是比较裸…
差不多就是个二分图带权匹配?(我还是敲费用流吧) 每个点向着自己能到的学校连边,费用按题意设定 跑最小费用最大流即可 #include <bits/stdc++.h> using namespace std; // Init: init() // Input: make(u,v,cap,cost) // Solver: solve(s,t) // Output: ans, cost namespace flow { const int N = 100005; const int M = 100…
题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description A coding contest will be held in this university, in a huge playground. The whole playground would be divided into N blocks,…
Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22088   Accepted: 11155 Description On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertica…
3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 960  Solved: 505[Submit][Status][Discuss] Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识.    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案必须满足:(1)每条边的实际流量都不超…
思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l],dp[i][j-1][k-1][l],dp[i-1][j][k][l-1],dp[i][j-1][k][l-1])+map[i][j]+map[k][l]; 若两点相同减去一个map[i][j]即可 费用流方法(可以扩展为k条路径,但时间复杂度较高): 源点连接左上角点流量为k.费用为0,右下角…
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. 思路: 比赛的时候一直在想如何dp.没有往网络流的方向多想想.赛后看到tag想了想,咦,费用流可做. 所以思路是最小费用最大流,dp如今都不知如何做. 将一个位置拆分成3个点,从超级源点分别到1号点连容量为a,价值为0 的边,往2号点连容量为b,价值为0的边. 对于每个位置,从1号点和2号点分别向…
zkw费用流+当前弧优化 var o,v:..] of boolean; f,s,d,dis:..] of longint; next,p,c,w:..] of longint; i,j,k,l,y,t,ss,tt,n,ans,imp,flow:longint; procedure link(i,j,k,l:longint); begin inc(t); next[t]:=d[i]; d[i]:=t; p[t]:=j; c[t]:=k; w[t]:=l; next[-t]:=d[j]; d[j]…
4213: 贪吃蛇 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 58  Solved: 24[Submit][Status][Discuss] Description  最近lwher迷上了贪吃蛇游戏,在玩了几天却从未占满全地图的情况下,他不得不承认自己是一个弱菜,只能改去开发一款更弱的贪吃蛇游戏. 在开发的过程中,lwher脑洞大开,搞了一个多条蛇的模式.但由于这种模式太难操作,于是他只好改变游戏的玩法,稍微变化一下游戏目标. 新的游戏是这样的:…
3638: Cf172 k-Maximum Subsequence Sum Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 174  Solved: 92[Submit][Status][Discuss] Description 给一列数,要求支持操作: 1.修改某个数的值 2.读入l,r,k,询问在[l,r]内选不相交的不超过k个子段,最大的和是多少. Input The first line contains integer n (1 ≤ n …
今年SDOI的题,看到他们在做,看到过了一百多个人,然后就被虐惨啦... 果然考试的时候还是打不了高端算法,调了...几天 默默地yy了一个费用流构图: 源连所有点,配对的点连啊,所有点连汇... 后来罗爷爷提醒我这样子会wa,因为你无法保证所有点都没有超过B[I]次,too naive 正解是还要考虑到奇数/偶数个质数的数字,把它们变成可二分图,看出这个性质就OK了... 至于要保证费用下界的问题,这个..我也不知道为什么我原来的方法不行 后来照着标程改的,加了一行memset就过了,一脸懵逼…
题目链接 题意:两个队伍,有一些边相连,问最大组对数以及最多女生数量 分析:费用流模板题,设置两个超级源点和汇点,边的容量为1,费用为男生数量.建边不能重复建边否则会T.zkw费用流在稠密图跑得快,普通的最小费用最大流也能过,只是相对来说慢了点. #include <bits/stdc++.h> const int N = 5e2 + 5; const int INF = 0x3f3f3f3f; struct Min_Cost_Max_Flow { struct Edge { int from…
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4807 Description The campus of Nanjing University of Science and Technology can be viewed as a graph with N vertexes and M directed edges (vertexes are numbered from 0 to N - 1). Each edge has the s…
题意: 给你一个带权有向图,选择一些边组成许多没有公共边的环,使每个点都在k个环上,要求代价最小. SOL: 现在已经养成了这种习惯,偏题怪题都往网络流上想... 怎么做这题呢... 对我们看到每个点都在k个环上,而且没有公共边,那么很显然每个点的入度出度都为k.   然后我们拆点,建源汇ST,S与每个入点连边容量为k,出点与汇点相连容量为k,费用为0,如果城市i,j之间有边那么将i的入点和j的出点连一条费用为权,容量为1的边.然后跑一遍费用流.如果每条边都满流那么就有解. 好神奇...从环变成…
看了一眼题目&数据范围,觉得应该是带下界的费用流 原来想拆点变成二分图,能配对的连边,跑二分图,可行性未知 后来看到另外一种解法.. 符合匹配要求的数要满足:质因子的个数相差为1,且两者可整除 因此筛完素数.分解质因子,记录质因子的个数 奇数个分为一类,偶数个分为一类,那么连边一定是奇数向偶数才可以连,而其中能整除的且商为质数的连边 然后源点向奇数的点连边,偶数的点向汇点连边,跑费用流 至于下界,我们先把权值取负 由于是求最小费用,那么当求得费用刚好大于0时 上一次刚好小于零的费用流就是最终的流…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2245 分析: 要注意到题目下面说的w是单增的 明显的费用流: 弄个源点S,汇点T S连向每种产品,流量是这种产品所需个数,费用是0 每种产品连向能制作它的人,流量为inf,费用是0 每个人向T连Si+1条边,流量t[i][j]-t[i][j-1],费用w[i][j] (因为w是单增的,所以就保证了每个人连向T的Si+1条边肯定是上面的边填满之后再填下面的边,保证了符合题意,如果没有这…
DCrusher爷喜欢A我做的水题,没办法,只能A他做不动的题了.... 3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge Submit: 682 Solved: 377 [Submit][Status][Discuss] Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最…
http://tyvj.cn/Problem_Show.aspx?id=1982 一眼题.. 源向每个人连容量为1,费用为0的边. 每个人向一个中转节点na连容量1,费用0的边(你也可以不连,直接连后边的) 中转节点na想所有a物品连容量1,费用0的边 所有a物品向所有b物品连容量1,费用为(m-n)^2的边 所有b物品向汇连容量1,费用0的边. 跑一次费用流即可. #include <cstdio> #include <cstring> #include <cmath>…
http://wikioi.com/problem/1033/ 这题也是很水的费用流啊,同之前那题一样,拆点然后建边,容量为1,费用为点权.然后建个源连第一行每个点,容量为1,费用为0,然后最后一行每个点连汇,容量为1,费用为0. 最后再建个超级源连一条边到源,容量为k,费用为0.再建个超级汇,汇连边到它,容量为k,费用为0. 跑一次费用流即可. #include <cstdio> #include <cstring> #include <cmath> #include…
http://www.lydsy.com/JudgeOnline/problem.php?id=1834 我又思考人生了T_T,nd的数组开小了,一直wa,调了一个小时才发现啊!!!!!我一直以为我的isap错了T_T,可是完全没错啊!!!! 这题其实第一个问很简单,跑一次最大流即可.第二个问就是在跑完最大流的残量网络上每条边都扩充容量为oo,费用为边的费用,然后设个超级源连一条容量为k的边到点1,再跑一次费用流即可. 理由很简单,自己想,我就不说了. #include <cstdio> #i…
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^2m) #include<cstdio> #include<cctype> #include<queue> #include<cstring> #include<algorithm> #define rep(s,t) for(int i=s;i<…
题目链接:http://acdream.info/problem?pid=1128 Problem Description wuyiqi陷入了一个迷宫中,这个迷宫是由N*M个格子组成的矩阵.每个格子上堆放了一定数量的箱子.(i,j)表示第i行,第j列的格子.wuyiqi可以将一个格子上的箱子移动到相邻的格子上,或者在这个格子上销毁.也就是在(i,j)的箱子可以移动到(i-1,j).(i+1,j).(i,j-1)和(i,j+1),但是不能移动到矩阵范围外.将(i,j)的格子上的一个箱子移动到相邻格…
题目链接:http://codeforces.com/problemset/problem/321/B 题意:两个人,分别有n.m张牌.每张牌有两个属性类型和能力,类型为攻击或者防守.B的m张牌的属性均为攻击.模拟以下过程: (1)B所有的牌都使用过,结束:否则,B此时想要结束则结束,不想结束转(2): (2)B从自己未使用过的牌中选出一张,设其能力值为X,转(3): (3)A所有牌都使用过,A受到的伤害值为X,转(1):否则转(4): (4)B从A未使用过的牌中选出一张,设其能力值为Y,若这张…
裸的费用流啊... 建图:对于一个点p拆成两个p1和p2,S向p1连边,流量为1,费用为0:p2向T连边流量为1,费用为0 然后i1向a2到b2分别连边,不妨设i1向p2连边,流量为1,费用为|i - p| * ki 跑一下费用流,如果流量不为n,NIE!然后答案就是费用之和... /************************************************************** Problem: 1520 User: rausen Language: C++ Res…
Problem Jam's Store (HDU5619) 题目大意 有m个服务员,和n个顾客,给出每个服务员招待每个顾客的时间,每个服务员在同一时间只能服务一个顾客,询问所有顾客完成服务的最少时间. 解题分析 第一反应就是用费用流来做. 题目难度在于每个服务员在同一时间只能服务一个顾客.考虑把每个服务员拆成n个点,表示服务员的服务顺序. 若第i个顾客是第j个服务员的倒数第k个服务对象,那么对答案的贡献为V[i,j]*k (使k-1个顾客等待了V[i,j]的时间) 因此由S向每个顾客连一条(1,…
每个格拆成两个点,出点连能到的点的入点,如果是箭头指向 方向费用就是0,要不就是1,源点连所有出点,所有入点连 汇点,然后费用流 /**************************************************************     Problem:     User: BLADEVIL     Language: Pascal     Result: Accepted     Time: ms     Memory: kb *******************…
题意 给出一个n*n大小的矩阵,要求从左上角走到右下角,每次只能向下走或者向右走并取数,某位置取过数之后就只为数值0,现在求解从左上角到右下角走K次的最大值. 思路 经典的费用流模型:K取方格数. 构图方法:将矩阵的每个元素m[i][j]拆成两个点u=(i-1)*n+j和v=n*n+(i-1)*n+j,从u到v连两条边: 1> 连边(u,v),容量为1,费用值为m[i][j],这样可以保证每一个位置的数只被取一次 2> 连边(u,v),容量为INF,费用值为0,这样可以保证某位置取数被置为0之…
题意: 给一个n*m的矩阵,其中由k个人和k个房子,给每个人匹配一个不同的房子,要求所有人走过的曼哈顿距离之和最短. 输入: 多组输入数据. 每组输入数据第一行是两个整型n, m,表示矩阵的长和宽. 接下来输入矩阵. 输出: 输出最短距离. 题解: 标准的最小费用最大流算法,或者用KM算法.由于这里是要学习费用流,所以使用前者. 最小费用最大流,顾名思义,就是在一个网络中,不止存在流量,每单位流量还存在一个费用.由于一个网络的最大流可能不止一种,所以,求出当前网络在流量最大的情况下的最小花费.…