poj 3469 Dual Core CPU
来源:互联网 发布:软件开发工作流程图 编辑:程序博客网 时间:2024/06/05 02:36
题目链接:http://poj.org/problem?id=3469
题目大意:求一些任务在一个双核的cpu运行,但当两个需要交换数据的任务在不同的核运行时要有额外花费,求最小花费。
题目思路:别人的做法:源点连到点的容量为Ai,点到汇点的容量为Bi,对于m个关系建容量为w的双向边,这样就转化为了求图上的最小割。不过我没法准确证明。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<queue>#include<algorithm>#include<vector>#include<stack>#include<list>#include<iostream>#include<map>using namespace std;#define inf 0x7f3f3f3f#define Max 30000int max(int a,int b){ return a>b?a:b;}int min(int a,int b){ return a<b?a:b;}int dis[Max],gap[Max],pre[Max],cur[Max],p[Max],sum;//int d[4][2]={0,1,1,0,0,-1,-1,0};//int mp[220][220];int n,m,s,t,eid;struct node { int to,next,c; }e[1000000];void addedge(int u,int v,int c){ e[eid].to=v; e[eid].c=c; e[eid].next=p[u]; p[u]=eid++;}void ISAP(int st,int ed,int n,int count) ///起点,终点,顶点数{ memset(dis, 0, sizeof(dis)); memset(gap, 0, sizeof(gap)); gap[0]=n; memcpy(cur, p, sizeof(p)); ///memcpy! int i,flag,v,u=pre[st]=st,maxflow=0,aug=inf; //puts("akk"); while(dis[st] < n) { for(flag=0,i=cur[u];i!=-1; i=e[i].next) /// cur[u] if(e[i].c&& dis[u] == dis[e[i].to]+1) { flag = 1; break; } if(flag) { if(aug > e[i].c) aug = e[i].c; v = e[i].to; pre[v] = u; cur[u] = i; u = v; if(u == ed) { for(u=pre[u]; 1;u=pre[u]) ///notice! { e[cur[u]].c -= aug; e[cur[u]^1].c += aug; if(u==st) break; // puts("akkk"); } maxflow += aug; aug = inf; } } else { int minx = n; for(i=p[u]; i!=-1; i=e[i].next) if(e[i].c&& dis[e[i].to]<minx) { minx = dis[e[i].to]; cur[u] = i; } if(--gap[dis[u]] == 0) break; dis[u] = minx+1; gap[dis[u]]++; u = pre[u]; } } // printf("Case %d:\n%d\n",count,maxflow); printf("%d\n",maxflow);}int main(){ int m,n,t,count=1; int u,v,c,i,j,k,x,y,a,b,w; while( scanf("%d%d",&n,&m)!=EOF) { eid=0; memset(p,-1,sizeof(p)); for(i=1;i<=n;i++) { scanf("%d%d",&a,&b); addedge(0,i,a); addedge(i,0,0); addedge(i,n+1,b); addedge(n+1,i,0); } while(m--) { scanf("%d%d%d",&a,&b,&w); addedge(a,b,w); addedge(a,b,0); addedge(b,a,w); addedge(b,a,0); } // printf("%d\n",eid); ISAP(0,n+1,n+2,count++); // printf("%d\n") }}
- POJ 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- POJ 3469 Dual Core CPU
- POJ-3469-Dual Core CPU
- POJ 3469 Dual Core CPU
- POJ 3469 Dual Core CPU
- 【Poj 3469】 Dual Core CPU
- POJ 3469 Dual Core CPU
- POJ 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- POJ 3469 Dual Core CPU
- poj 3469 Dual Core CPU
- [poj 3469]Dual Core CPU
- POJ 3469 Dual Core CPU
- hdu 1151 Air Raid
- javascript笔记1
- nginx log_format for webalizer
- AIO 磁盘异步I/O
- 面试训练排序
- poj 3469 Dual Core CPU
- 我们是酷毕(苦逼)程序员!--------持续更新。
- MySQL_02
- 最大子序列和问题
- 软件开发文档之概述
- .Net企业级应用架构设计之UML
- tomcat安全设置
- 面试训练斐波那契数列
- 为什么转置一个512x512的矩阵,会比513x513的矩阵慢很多?