构图思路:

1. 源点S与顶点v连边,容量为A

2. 顶点v与汇点T连边,容量为B

3. 边(a,b,c),则顶点a与顶点b连双向边,容量为c

则最小花费为该图最小割即最大流。

若两个作业分别在不同机器运行,则之间若有边,则必定是满流,否则必定还有增广路。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;const int inf = 0x3f3f3f3f;
const int MAXN = (int)2e5+10;
int n, m;
int S, T, N;
int head[MAXN], idx;
struct Edge{int v, f, nxt;
}edge[MAXN<<3];void AddEdge(int u,int v,int f){edge[idx].v = v, edge[idx].f = f;edge[idx].nxt = head[u], head[u] = idx++;edge[idx].v = u, edge[idx].f = 0;edge[idx].nxt = head[v], head[v] = idx++;
}int vh[MAXN], h[MAXN];
int dfs(int u,int flow){if(u == T) return flow;int tmp = h[u]+1, sum = flow;for(int i = head[u]; ~i; i = edge[i].nxt ){if( edge[i].f && (h[edge[i].v]+1 == h[u]) ){int p = dfs( edge[i].v, min(sum,edge[i].f));edge[i].f -= p, edge[i^1].f += p, sum -= p;if( sum == 0 || h[S] == N ) return flow - sum;}}for(int i = head[u]; ~i; i = edge[i].nxt )if( edge[i].f ) tmp = min( tmp, h[ edge[i].v ] );if( --vh[ h[u] ] == 0 ) h[S] = N;else ++vh[ h[u]=tmp+1 ];return flow-sum;
}
int sap(){int maxflow = 0;memset(h,0,sizeof(h));memset(vh,0,sizeof(vh));vh[0] = N;while( h[S]<N ) maxflow += dfs(S,inf);return maxflow;
}int main(){while( scanf("%d%d",&n,&m) != EOF ){memset(head,-1,sizeof(head));S = 0, T = n+1, N = n+2; idx = 0;for(int i = 1; i <= n; i++){int a, b;scanf("%d%d",&a,&b);AddEdge( S, i, a );AddEdge( i, T, b );}for(int i = 0; i < m; i++){int a, b, c;scanf("%d%d%d",&a,&b,&c);AddEdge( a, b, c );AddEdge( b, a, c );}int ans = sap();printf("%d\n", ans );}return 0;
}

View Code

转载于:https://www.cnblogs.com/yefeng1627/p/3176263.html

poj 3469 Dual Core CPU 最小割相关推荐

  1. POJ 3469 Dual Core CPU (最小割建模)

    题意 现在有n个任务,两个机器A和B,每个任务要么在A上完成,要么在B上完成,而且知道每个任务在A和B机器上完成所需要的费用.然后再给m行,每行 a,b,w三个数字.表示如果a任务和b任务不在同一个机 ...

  2. POJ 3469 Dual Core CPU(最小割模型的建立)

    分析: 这类问题的一遍描述,把一些对象分成两组,划分有一些代价,问最小代价.一般性的思路是, 把这两组看成是S点和T点,把划分的代价和割边的容量对应起来求最小割. 把S和可模版tem之间到达关系看作是 ...

  3. POJ-3469 Dual Core CPU 最小割最大流

    该题是给定对个任务,然后告诉你这多个任务在两个不同的核心上执行任务所花费的不同代价,并且还告诉如果其中一些任务不在同一个核心上面运行的话,还有有多余的开销.最后问我们完成所有任务的最小开销是多少? 对 ...

  4. POJ - 2914 Minimum Cut(全局最小割-Stoer_Wagner)

    题目链接:点击查看 题目大意:给出一张无向图,要求将其分为两个集合,使得最小割最小 题目分析:算法学习自:https://blog.csdn.net/dingdi3021/article/detail ...

  5. POJ - 1966 Cable TV Network(最小割-最大流)

    题目链接:点击查看 题目大意:给定一张无向图,求最少去掉多少个点,可以使图不连通 题目分析:让图不连通,也就是让图分成两个部分,这样题目就转换成了最小割的问题了,不过最小割问题是要求最小割边,所以我们 ...

  6. Dual Processor vs Dual Core

    比较了AMD和Intel各自产品上的差别.其中的评论也有很好的参考意义.原文链接:http://www.pugetsystems.com/labs/articles/Dual-Processor-vs ...

  7. poj 1815 Friendship 最小割 拆点 输出字典序

    题目链接:http://poj.org/problem?id=1815 题意:A与B能通信当且仅当A知道B的电话号或者A知道C的电话号且C与B能通信.若A知道B的电话号,那么B也知道A的电话号. 然而 ...

  8. poj 2914(stoer_wanger算法求全局最小割)

    题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t   V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...

  9. poj 3084(最小割)

    题目链接:http://poj.org/problem?id=3084 思路:题目的意思是不让入侵者进入保护的房间,至少需要锁几道门.网络流建模:设一个超级源点,源点与有入侵者的房间相连,边容量为in ...

最新文章

  1. linux 安装php 5.5_Linux下yum升级安装PHP 5.5
  2. 公众号第三方平台开发 获取 component_verify_ticket
  3. java常见集合及其用途
  4. python装饰器由浅入深_由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类
  5. C++中一些类和数据结构的大小的总结
  6. 逐行计算、逐行递延、逐行更新
  7. 华硕服务器 u盘安装系统,华硕用u盘如何安装系统
  8. 【LeetCode笔记】438. 找到字符串中所有字母异位词(Java、字符串、滑动窗口)
  9. java获取异常堆栈详情
  10. 【课程】MIT最新深度学习课程集
  11. exe msdt 无法上网_软网推荐:可装EXE程序的ReactOS
  12. Start Developing iOS Apps Today系列(二)
  13. 如何处理服务器SSL收到了一个弱临时Diffie-Hellman 密钥?
  14. C#WinForm程序异常退出的捕获、继续执行与自动重启
  15. shell之BASH_SOURCE
  16. chronodex怎么用_手账技巧| 时间饼Chronodex的用法经验、使用心得和灵感收集
  17. 5328笔记 Advanced ML Chapter3-Hypothesis Complexity and Generalisation
  18. java实现dwg转pdf
  19. package.json中安装包的版本说明和符号说明
  20. LeetCode动画 | 218.天际线问题

热门文章

  1. 读取位置 0x00000028 时发生访问冲突该怎么解决
  2. Matlab中varargin函数
  3. SVM分类的一个例子
  4. php 判断来源 微信客户端_PHP判断手机端、PC端 、微信代码实例
  5. Numpy.array矩阵百分制化(比例化)
  6. pandas.Series.multiply()含义解释
  7. 利用Matlab比较IIR和FIR,细说IIR滤波器和FIR滤波器的区别
  8. script 有哪个属性可以让它不立即执行 defer,async
  9. require.js基本用法
  10. 服务器被黑给我上了一课