POJ 3469 Dual Core CPU(最小割)
【题目链接】 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 <cstring>
- #include <vector>
- #include <queue>
- using namespace std;
- const int INF=0x3f3f3f3f;
- const int MAX_V=20010;
- struct edge{int to,cap,rev;};
- vector<edge> G[MAX_V];
- int level[MAX_V],iter[MAX_V];
- void add_edge(int from,int to,int cap){
- G[from].push_back((edge){to,cap,G[to].size()});
- G[to].push_back((edge){from,0,G[from].size()-1});
- }
- void bfs(int s){
- memset(level,-1,sizeof(level));
- queue<int> que;
- level[s]=0;
- que.push(s);
- while(!que.empty()){
- int v=que.front(); que.pop();
- for(int i=0;i<G[v].size();i++){
- edge &e=G[v][i];
- if(e.cap>0&&level[e.to]<0){
- level[e.to]=level[v]+1;
- que.push(e.to);
- }
- }
- }
- }
- int dfs(int v,int t,int f){
- if(v==t)return f;
- for(int &i=iter[v];i<G[v].size();i++){
- edge &e=G[v][i];
- if(e.cap>0&&level[v]<level[e.to]){
- int d=dfs(e.to,t,min(f,e.cap));
- if(d>0){
- e.cap-=d;
- G[e.to][e.rev].cap+=d;
- return d;
- }
- }
- }return 0;
- }
- int max_flow(int s,int t){
- int flow=0;
- for(;;){
- bfs(s);
- if(level[t]<0)return flow;
- memset(iter,0,sizeof(iter));
- int f;
- while((f=dfs(s,t,INF))>0){
- flow+=f;
- }
- }
- }
- const int MAX_N=20000;
- const int MAX_M=200000;
- int N,M;
- int A[MAX_N],B[MAX_N];
- int a[MAX_M],b[MAX_M],w[MAX_M];
- void init(){
- for(int i=0;i<N;i++)scanf("%d %d",&A[i],&B[i]);
- for(int i=0;i<M;i++)scanf("%d %d %d",&a[i],&b[i],&w[i]);
- }
- void solve(){
- int s=N,t=s+1;
- for(int i=0;i<N;i++){
- add_edge(i,t,A[i]);
- add_edge(s,i,B[i]);
- }
- for(int i=0;i<M;i++){
- add_edge(a[i]-1,b[i]-1,w[i]);
- add_edge(b[i]-1,a[i]-1,w[i]);
- }
- printf("%d\n",max_flow(s,t));
- }
- int main(){
- while(~scanf("%d%d",&N,&M)){
- init();
- solve();
- }return 0;
- }
POJ 3469 Dual Core CPU(最小割)的更多相关文章
- poj 3469 Dual Core CPU——最小割
题目:http://poj.org/problem?id=3469 最小割裸题. 那个限制就是在 i.j 之间连双向边. 根据本题能引出网络流中二元关系的种种. 别忘了写 if ( x==n+1 ) ...
- POJ 3469 Dual Core CPU (最小割建模)
题意 现在有n个任务,两个机器A和B,每个任务要么在A上完成,要么在B上完成,而且知道每个任务在A和B机器上完成所需要的费用.然后再给m行,每行 a,b,w三个数字.表示如果a任务和b任务不在同一个机 ...
- 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题
[题意]有n个程序,分别在两个内核中运行,程序i在内核A上运行代价为ai,在内核B上运行的代价为bi,现在有程序间数据交换,如果两个程序在同一核上运行,则不产生额外代价,在不同核上运行则产生Cij的额 ...
- poj 3469 Dual Core CPU 最小割
题目链接 好裸的题....... 两个cpu分别作为源点和汇点, 每个cpu向元件连边, 权值为题目所给的两个值, 如果两个元件之间有关系, 就在这两个元件之间连边, 权值为消耗,这里的边应该是双向边 ...
- poj 3469 Dual Core CPU【求最小割容量】
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 21453 Accepted: 9297 ...
- POJ 3469.Dual Core CPU 最大流dinic算法模板
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 24830 Accepted: 10756 ...
- POJ 3469 Dual Core CPU Dual Core CPU
Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 23780 Accepted: 10338 Case Time Lim ...
- POJ 3469(Dual Core CPU-最小割)[Template:网络流dinic V2]
Language: Default Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 19321 ...
- POJ - 3469 Dual Core CPU (最小割)
(点击此处查看原题) 题意介绍 在一个由核A和核B组成的双核CPU上执行N个任务,任务i在核A上执行,花费Ai,在核B上执行,花费为Bi,而某两个任务之间可能需要进数据交互,如果两个任务在同一个核上执 ...
随机推荐
- python 多版本的兼容
1.针对linux版本 linux版本的话,首先调用whereis python 来获取到多版本的路径. root@Ulord-14:~# whereis pythonpython: /usr/bin ...
- Python全栈工程师
ParisGabriel Python 入门基础 print(“hello world”)变量 : 存储信息的,日后被调用.修改操作常量: 固定不变的量,字母大写命名规则:1. 字母数 ...
- Linux查看端口被占用情形
查看某端口的占用情况: lsof -i:<端口号> 例如:lsof -i:8080 netstat -apn|grep <端口号> 例如: netstat -apn | gre ...
- Android 程序怎么打log
常见的做法: 1. 定义一个常量(变量)作为是否输出log的flag: 2. 定义一个常量(变量)作为log级别设定: 2. 调试.打包时,按需要调整常量的值,从而控制log打印. 常见代码参考: h ...
- 【Python】- 第一行跟第二行的写法
第一行:目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python:告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: ...
- 【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块
原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html 题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没 ...
- 静态编译zsummerX
下载 https://github.com/zsummer/zsummerX 下载 http://ftp.gnu.org/gnu/glibc/ ../configure --prefix=/home/ ...
- 3.5 实例讲解Lucene索引的结构设计
3.2节我们已经运行了一个Lucene建立索引的小程序,这一节我们就以这个小程序为例讲解一下Lucene建立索引的过程. import java.nio.charset.StandardCharset ...
- Windows Server 创建环回网卡
1.以管理员身份运行cmd后,在cmd命令窗口中执行:hdwwiz 启动硬件添加向导. 2.在添加硬件向导中选择手动安装或自动搜索都可以.然后选择网络适配器. 3.选择网络适配器:厂商选择Micros ...
- shell脚本——项目2
案例名称:发送告警邮件 背景: 外部邮箱的服务器(163等) 安装mailx(yum) 配置邮箱信息 vim /etc/mail.rc #配置自己的邮箱信息 set from=18906534060@ ...