poj 3469 Dual Core CPU
题目描述:
由于越来越多的计算机配置了双核CPU,TinySoft公司的首席技术官员,SetagLilb,决定升
级他们的产品-SWODNIW。
SWODNIW包含了N个模块,每个模块必须运行在某个CPU中。每个模块在每个CPU中
运行的耗费已经被估算出来了,设为Ai和Bi。同时,M对模块之间需要共享数据,如果他们运行
在同一个CPU中,共享数据的耗费可以忽略不计,否则,还需要额外的费用。你必须很好地安排
这N个模块,使得总耗费最小。
思路: 如果将两个CPU分别视为源点和汇点、模块视为顶点,则可以按照以下方式构图:对于第i
个模块在每个CPU中的耗费Ai和Bi, 从源点向顶点i连接一条容量为Ai的弧、从顶点i向汇点
连接一条容量为Bi的弧;对于a模块与b模块在不同CPU中运行造成的额外耗费w,顶点a
与顶点b连接一条容量为w的弧。此时每个顶点(模块)都和源点及汇点(两个CPU)相连,即
每个模块都可以在任意一个CPU中运行
不难了解到,对于图中的任意一个割,源点与汇点必不连通。因此每个顶点(模块)都不可
能同时和源点及汇点(两个CPU)相连,即每个模块只在同一个CPU中运行。此时耗费即为割
的容量。很显然,当割的容量取得最小值时,总耗费最小。故题目转化为求最小割的容量。 #include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MOD 1000000007
#define maxn 20010
#define maxm 1000000
#define LL long long
struct Eg{
int to;
int next;
int f;
}E[maxm];
int V[maxn],num;
int N,M;
void add(int u,int v,int c){
E[num].to=v;
E[num].f=c;
E[num].next=V[u];
V[u]=num++; E[num].to=u;
E[num].f=;
E[num].next=V[v];
V[v]=num++;
}
int level[maxn];
int qu[maxn];
bool BFS(int s,int t){
int i,iq=;
// memset(level,0,sizeof(level));
for(i=;i<=t;i++) level[i]=;
//queue<int> Q;
int u,v,e;
qu[iq++]=s;// Q.push(s);
level[s]=;
// while(!Q.empty()){
for(i=;i<iq;i++){
u=qu[i];//Q.front();
//Q.pop();
if(u==t) return true;
for(e=V[u];e!=-;e=E[e].next){
v=E[e].to;
if(!level[v]&&E[e].f>)
{
level[v]=level[u]+;
qu[iq++]=v;// Q.push(v);
}
}
}
return false;
}
int cur[maxn];
int dfs(int u,int maxf,int t){
if(u==t||maxf==) return maxf;
int ret=,f,e,v;
for(e=cur[u];e!=-;e=E[e].next){// 当前弧优化
v=E[e].to;
if(E[e].f>&&level[u]+==level[v]){
f= dfs(v,min(maxf,E[e].f),t);
E[e].f-=f;
E[e^].f+=f;
maxf-=f;
ret+=f;
cur[u]=e;
if(maxf==) break;
}
}
return ret;
}
int Dinic(int s,int t){
int flow=;
while(BFS(s,t)){
for(int i=;i<=t;i++)
cur[i]=V[i];
flow+=dfs(s,MOD,t);
}
return flow;
}
int main(){
int i;
int a,b,w;
while(scanf("%d %d",&N,&M)!=EOF){
for(i=;i<=N+;i++)V[i]=-;
num=;
for(i=;i<=N;i++){
scanf("%d %d",&a,&b);
add(,i,a);
add(i,N+,b);
}
while(M--){
scanf("%d %d %d",&a,&b,&w);
add(a,b,w);
add(b,a,w);
}
printf("%d\n",Dinic(,N+));
} return ;
}
poj 3469 Dual Core CPU的更多相关文章
- 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【求最小割容量】
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 21453 Accepted: 9297 ...
- POJ 3469 Dual Core CPU(最小割)
[题目链接] http://poj.org/problem?id=3469 [题目大意] 有N个模块要在A,B两台机器上执行,在不同机器上有不同的花费 另有M个模块组(a,b),如果a和b在同一台机子 ...
- 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 (最小割)
(点击此处查看原题) 题意介绍 在一个由核A和核B组成的双核CPU上执行N个任务,任务i在核A上执行,花费Ai,在核B上执行,花费为Bi,而某两个任务之间可能需要进数据交互,如果两个任务在同一个核上执 ...
随机推荐
- 17.2 The DispatcherServlet
综述: Spring’s web MVC framework is, like many other web MVC frameworks, request-driven, designed arou ...
- nenu contest3 The 5th Zhejiang Provincial Collegiate Programming Contest
ZOJ Problem Set - 2965 Accurately Say "CocaCola"! http://acm.zju.edu.cn/onlinejudge/showP ...
- memcached+memadmin
一.安装apache yum install httpd 二.安装php yum install php* 三.apache配置 vi /etc/httpd/conf/httpd.conf 添加Add ...
- Codeforces Round #363 (Div. 2)->C. Vacations
C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- mysql之sql语句导入与导出讲解
导出SQL:mysqldump -u root -p 数据库名 [表名1 表名2] > 输出地址其中表名可选 本机测试实例:
- Unity3D脚本中文系列教程(六)
http://dong2008hong.blog.163.com/blog/static/469688272014031943118/ Unity3D脚本中文系列教程(五) 变量 ◆var colli ...
- zoj 3232 It's not Floyd Algorithm(强联通分量,缩点)
题目 /******************************************************************/ 以下题解来自互联网:Juny的博客 思路核心:给你的闭包 ...
- SPOJ LGLOVE 7488 LCM GCD Love (区间更新,预处理出LCM(1,2,...,n))
题目连接:http://www.spoj.com/problems/LGLOVE/ 题意:给出n个初始序列a[1],a[2],...,a[n],b[i]表示LCM(1,2,3,...,a[i]),即1 ...
- POJ 1740
#include <iostream> #define MAXN 100 using namespace std; int _m[MAXN]; bool mark[MAXN]; int m ...
- SNAT
http://blog.chinaunix.net/uid-2628744-id-2454879.html