题目:http://poj.org/problem?id=3469 最小割裸题. 那个限制就是在 i.j 之间连双向边. 根据本题能引出网络流中二元关系的种种. 别忘了写 if ( x==n+1 ) return flow ; ! #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; ,M=2e5+,INF=0x3f3f3f3f;…
题意 现在有n个任务,两个机器A和B,每个任务要么在A上完成,要么在B上完成,而且知道每个任务在A和B机器上完成所需要的费用.然后再给m行,每行 a,b,w三个数字.表示如果a任务和b任务不在同一个机器上工作的话,需要额外花费w.现在要求出完成所有任务最小的花费是多少. 思路 上次做的构图题是基于割截断s->t流与题目联系的,而这道题的构图则是基于割把流网络的点划分成了S.T点集,并且不同点集间的边都是割边.这是目前我所接触到的最小割的建模类型. 回到本题构图:源点向任务连一条Ai容量的边,任务…
[题意]有n个程序,分别在两个内核中运行,程序i在内核A上运行代价为ai,在内核B上运行的代价为bi,现在有程序间数据交换,如果两个程序在同一核上运行,则不产生额外代价,在不同核上运行则产生Cij的额外代价,问如何划分使得代价最小. 用最小的费用将对象划分为两个集合的问题,常常可以转换为最小割后顺利解决 建立源点与汇点,每个程序视为一个点,源点与在各个程序连一条边,最大流量为bi,汇点与各个程序连一条边,最大流量ai,对于有额外代价的程序,连一条双向边,流量为cij. 一开始用Dinic算法做,…
题目链接 好裸的题....... 两个cpu分别作为源点和汇点, 每个cpu向元件连边, 权值为题目所给的两个值, 如果两个元件之间有关系, 就在这两个元件之间连边, 权值为消耗,这里的边应该是双向边. #include<bits/stdc++.h> using namespace std; #define mem(a) memset(a, 0, sizeof(a)) ; ], s, t, num, q[maxn*], dis[maxn]; struct node { int to, next…
Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 21453   Accepted: 9297 Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Co…
Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 24830   Accepted: 10756 Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft C…
Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 23780   Accepted: 10338 Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, de…
Language: Default Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 19321   Accepted: 8372 Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Offi…
题意:给你n个模块,每个模块在A核花费为ai,在B核跑花费为bi,然后由m个任务(ai,bi,wi),表示如果ai,bi不在同一个核上跑,额外的花费为wi,求最小的花费. 一开始想的时候以为是费用流,但想着想着觉得,这么大的数据量绝对不可能是费用流.最后发现它是一个最小割模型.实际上就是要将网络里的模块划分成s-t两个点集,然后我们合适的构造一下边就可以使得对应的最小割就是我们的答案,构造的方法是这样的:当模块属于A集的时候,花费为ai,所以就从向t连一条ai的边,而当模块属于B集的时候,花费为…
分析: 这类问题的一遍描述,把一些对象分成两组,划分有一些代价,问最小代价.一般性的思路是, 把这两组看成是S点和T点,把划分的代价和割边的容量对应起来求最小割. 把S和可模版tem之间到达关系看作是属于核A,对称地,T对应B.模块tem安装在A上代价Ai,就是割断tem和T,连一条tem到T的容量为Ai的边. 相应地,对于Bi,连一条S到tem容量为Bi的边.当ai安装在A上,bi安装在B上,也就是s - ai, bi - t(-表示可到达),这时候如果有额外花费wi 那么ai - bi之间连…
[题目链接] http://poj.org/problem?id=3469 [题目大意] 有N个模块要在A,B两台机器上执行,在不同机器上有不同的花费 另有M个模块组(a,b),如果a和b在同一台机子上执行则没有额外花费 否则会产生额外t的花费,求最小花费 [题解] 我们从s和t分别对每个模块连Ai和Bi的边,对于模块间的花费 我们在a和b之间分别连t的边 那么这个图的最小割就是最小花费,那么我们只要求一遍最大流即可. [代码] #include <cstdio> #include <c…
(点击此处查看原题) 题意介绍 在一个由核A和核B组成的双核CPU上执行N个任务,任务i在核A上执行,花费Ai,在核B上执行,花费为Bi,而某两个任务之间可能需要进数据交互,如果两个任务在同一个核上执行,那么数据交互将没有花费,如果在不同核上执行,将产生wi的花费,问将n个任务全部执行产生的最小花费 . 解题思路 题目要求将n个任务分配为两个不同的集合,使得执行n个任务总花费最少,这类的题目我们一般将其转化为最小割问题,即花费最小的代价将n个点分为两部分.建图如下: 1)由源点向每个任务建一条容…
题目:http://poj.org/problem?id=3469 最小割水题(竟然没能1A): 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; ,maxm=2e5+,inf=0x3f3f3f3f; ,cur[maxn],ans; queue<int>q; struct N{ int to,nxt,w;…
题目描述:由于越来越多的计算机配置了双核CPU,TinySoft公司的首席技术官员,SetagLilb,决定升级他们的产品-SWODNIW.SWODNIW包含了N个模块,每个模块必须运行在某个CPU中.每个模块在每个CPU中运行的耗费已经被估算出来了,设为Ai和Bi.同时,M对模块之间需要共享数据,如果他们运行在同一个CPU中,共享数据的耗费可以忽略不计,否则,还需要额外的费用.你必须很好地安排这N个模块,使得总耗费最小.思路: 如果将两个CPU分别视为源点和汇点.模块视为顶点,则可以按照以下方…
[题目分析] 构造一个最小割的模型. S向每一个点连Ai,每一个点向T连Bi. 对于每一个限制条件,在i和j之间连一条Cij的双向边即可. 然后求出最小割就是最少的花费. 验证最小割的合理性很容易. [代码] #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> //#include <map> #include <set> #include…
划分成两个集合使费用最小,可以转成最小割,既最大流. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<sstream> #include<cm…
Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 25576   Accepted: 11033 Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft C…
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 20935 Accepted: 9054 Case Time Limit: 5000MS Description As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corpor…
Friendship Time Limit: 2000MS   Memory Limit: 20000K Total Submissions: 8025   Accepted: 2224 Description In modern society, each person has his own friends. Since all the people are very busy, they communicate with each other only by phone. You can…
比较明显的网络流最小割模型,对于这种模型我们需要先求获利的和,然后减去代价即可. 我们对于第i个人来说, 如果选他,会耗费A[I]的代价,那么(source,i,a[i])代表选他之后的代价,如果不选他,我们会产生Σw[i][j] 1<=j<=n的代价,也就是这么多的利益我们无法得到,然后对于两个人的互相影响,连边(i,j,2*w[i][j]),代表如果不选i,选j的话,本来i中选j的利益得不到,又要损失j对i的影响为w[i][j].所以共计损失2*w[i][j].之后求最小割=最大流就行了.…
题意: 有n个士兵,你可以选择让它成为战士还是法师. 有m对关系,u和v 如果同时为战士那么你可以获得a的权值 如果同时为法师,你可以获得c的权值, 如果一个为战士一个是法师,你可以获得b的权值 问你可以获得的最大权值是多少? 题解: 对每个士兵建立一个点x ,点x 向源点s 连一条边,向汇点t 连一条边, 分别表示选择两种职业,然后就可以先加上所有的贡献,通过两点关系用 最小割建模,如下图所示 设一条边的三种贡献为A, B, C,可以得到以下方程: 如果x,y都是法师,你可以获得C的权值,但是…
题意: 一个双核CPU上运行N个模块,每个模块在两个核上运行的费用分别为Ai和Bi. 同时,有M对模块需要进行数据交换,如果这两个模块不在同一个核上运行需要额外花费. 求运行N个模块的最小费用. 分析: 这是一个集合划分问题,将这两个模块划分成两个集合,一个集合中的模块在核A上运行,一个在核B上运行. 增加一个源点S和汇点T,每个模块分别和源点和汇点连一条边,容量为在该核上运行的花费. 然后在两个模块对之间连容量为额外花费的双向边. 图中的一个割就对应一个集合的划分,最小割就是最小的总费用. #…
形象生动的最小割.. #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; #define INF (1<<30) #define MAXN 2222 #define MAXM 888888 struct Edge{ int v,cap,flow,next; }edge[MAXM]; int vs,vt,NE,NV;…
http://poj.org/problem?id=3469 题目大意: 两个CPU,处理每个任务有不同的代价,有些对任务如果不在同一个CPU就会增加代价,求最小代价. ———————————————————————————— 一看,网络流,再一看,最小. 哦,最小割. 咋做啊,不会…… 查题解吧,学一学最小割的建图方法. 哦----这样啊. 割一个图,就是将图中的点分为属于源点(S)和属于汇点(T)两个集合. 那么我们将属于S的点视为用了A CPU的.所以我们建图就把S连到任务点的容量为用A…
刚学了Dinic就开始做题,然后就崩了. 题意:若干个任务,可以放在两个CPU中任意一个上完成,各有一定代价.其中又有若干对任务,如果它们不在同一个CPU上完成,会产生额外代价.最小化并输出代价. 一开始的想法是吧一个任务拆开成两个点(受2-sat的影响),然后就发现自己没法做了.首先,需要保证由同一个任务拆成的两个点只流过一个,这就会使最大流变成费用流.(我不会费用流)其次,难以满足第二个要求.后来一想,网络流与2-sat建图的区别在于网络流的状态表现在边的流量上(是否满流),而2-sat表现…
3144: [Hnoi2013]切糕 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1764  Solved: 965 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x,y,z) (1≤x≤P, 1≤y≤Q, 1≤z≤R). 100%的数据满足P,Q,R≤40,0≤D≤R,且给出的所有的不和谐值不超…
http://poj.org/problem?id=3308 题意:一个m*n的网格,有L位火星空降兵降落在网格中,地球卫士为了能同时消灭他们,在网格的行或列安装了一个枪支,每行或每列的枪支都能消灭这一整行或整列的空降兵,给出每一行和每一列安装枪支的花费,总的花费等于所有安装枪支的行和列的花费的乘积.求出最小的总的花费. 思路:(1)最小割:对于图中的两个点(一般为源点和汇点)来说,如果把图中的一些边去掉,如果它们之间无法连通的话,则这些边组成的集合就叫为割了.如果这些边有权值,最小割就是指权值…
如果我们先手拿完所有苹果再去考虑花费的话. S -> 摄像头 -> 苹果 -> T 就相当于找到一个最小割使得S和T分开. ans = sum - flow. 然后对于这一个模型, 我们可以不用网络流去解决. 我们从叶子出发,然后从下往上合并. 每次到一个节点的时候,我们先把摄像机所对应的影响去除. 然后把这个点的剩下流量传给父亲. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen(&…
我们可以对于消费和盈利的点建立二分图,开始答案为所有的盈利和, 那么源向消费的点连边,流量为消费值,盈利向汇连边,流量为盈利值 中间盈利对应的消费连边,流量为INF,那么我们求这张图的最小割,用 开始的答案减去最小割就是答案,因为最小割的存在不是左面就是右面, 割左面,代表建这条路,需要对应的消费,那么割右面代表不要这项盈利, 那本来加进去的盈利应该减掉,所以可以这样更新答案. /**********************************************************…
裁员 [问题描述] 在一个公司里,老板发现,手下的员工很多都不务正业,真正干事员工的没几个,于是老板决定大裁员,每开除一个人,同时要将其下属一并开除,如果该下属还有下属,照斩不误.给出每个人的贡献值和从属关系,求在最大贡献值的前提下最小剩下多少人及最大贡献值.留下多少人无所谓,现在老板想知道留下的人最大的贡献值是多少. [输入描述] 第一行两个整数n,m,表示有多少个员工与多少个从属关系. 第二行n个整数,表示每个员工的贡献值. 接着m行,每行两个数x,y,表示x是y的下属,一个员工可能有多个下…