POJ 3469 /// 最大流Dinic
题目大意:
N个模块 在核A上执行花费a[i] 在核B上执行花费b[i]
有M个模块组合(d1,d2) 若d1模块与d2模块在不同核上执行需多花费w[i]
求执行所有模块所需的最小花费
挑战P237
将问题转化为最小割问题 求得的最小割就是最小花费
那么记在核A上执行的模块集合为S 核B上执行的模块集合为T 建立源点s 汇点t
某模块在A上执行花费a[i] 则建一条该模块到t容量为a[i]的边
某模块在B上执行花费b[i] 则建一条s到该模块容量为b[i]的边
d1模块与d2模块在不同核上执行需多花费w[i] 则建一条d1与d2间容量为w[i]的无向边
最后求s-t最小割 只要求s到t的最大流就行
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int N=2e4+;
int n,m,s,t;
struct NODE { int v,w,r; };
vector <NODE> E[N];
void addE(int u,int v,int w) {
E[u].push_back((NODE){v,w,E[v].size()});
E[v].push_back((NODE){u,w,E[u].size()-});
}
/**Dinic*/
int lev[N], cur[N];
void bfs(int s) {
queue <int> q;
memset(lev,-,sizeof(lev));
lev[s]=; q.push(s);
while(!q.empty()) {
int u=q.front(); q.pop();
for(int i=;i<E[u].size();i++) {
NODE e=E[u][i];
if(e.w> && lev[e.v]<) {
lev[e.v]=lev[u]+;
q.push(e.v);
}
}
}
}
// 广搜一遍把可走的点分层保存在lev[]中
int dfs(int s,int t,int f) {
if(s==t) return f;
// 取地址才能修改到cur[]
for(int& i=cur[s];i<E[s].size();i++) {
NODE& e=E[s][i];
if(e.w> && lev[s]<lev[e.v]) {
int d=dfs(e.v,t,min(f,e.w));
if(d>) {
e.w-=d; E[e.v][e.r].w+=d;
return d;
}
}
}
return ;
}
// 深搜找增广路
int maxFlow(int s,int t) {
int flow=;
while() {
bfs(s);
if(lev[t]<) return flow;
memset(cur,,sizeof(cur));
while() {
int f=dfs(s,t,INF);
if(f==) break;
flow+=f;
}
}
}
/***/ int main()
{
while(~scanf("%d%d",&n,&m)) {
s=n, t=s+;
for(int i=;i<=t;i++) E[i].clear();
for(int i=;i<n;i++) {
int a,b; scanf("%d%d",&a,&b);
addE(i,t,a); addE(s,i,b);
}
for(int i=;i<m;i++) {
int a,b,w; scanf("%d%d%d",&a,&b,&w);
addE(a-,b-,w); addE(b-,a-,w);
}
printf("%d\n",maxFlow(s,t));
} return ;
}
POJ 3469 /// 最大流Dinic的更多相关文章
- poj 1273最大流dinic算法模板
#include<stdio.h> #include<string.h> #define N 300 #define inf 0x7fffffff #include<qu ...
- 网络流之最大流Dinic --- poj 1459
题目链接 Description A power network consists of nodes (power stations, consumers and dispatchers) conne ...
- poj 3281 最大流+建图
很巧妙的思想 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html 本题能够想到用最大流做,那真的是太绝了.建模的方法很 ...
- 网络流之最大流Dinic算法模版
/* 网络流之最大流Dinic算法模版 */ #include <cstring> #include <cstdio> #include <queue> using ...
- poj-1459-最大流dinic+链式前向星-isap+bfs+stack
title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...
- 网络最大流Dinic
1.什么是网络最大流 形象的来说,网络最大流其实就是这样一个生活化的问题:现在有一个由许多水管组成的水流系统,每一根管道都有自己的最大通过水流限制(流量),超过这个限制水管会爆(你麻麻就会来找你喝茶q ...
- POJ 3469.Dual Core CPU 最大流dinic算法模板
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 24830 Accepted: 10756 ...
- POJ 1149 PIGS(Dinic最大流)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20738 Accepted: 9481 Description ...
- POJ 3469(Dual Core CPU-最小割)[Template:网络流dinic V2]
Language: Default Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 19321 ...
随机推荐
- Java7任务并行执行神器:Fork&Join框架
Fork/Join是什么? Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分解成小任务,然后小任务又可以继续分解,然后每个小任务分别计算出结果再合并起来,最后将汇总的结果作为 ...
- jumpserver3.0页面配置
一.jumpserver的启动 1 2 Jumpserver的启动和重启 [root@test-vm001 install]# /opt/jumpserver/service.sh start/res ...
- 防止按钮重复点击的思路(js篇)
最直接的思路可能就是点击按钮后,按钮的事件绑定函数解绑,1s后重新绑定函数 <button id=</button> <script> btn.onclick = fun ...
- linux执行wget url时提示“无法建立 SSL 连接”
linux执行wget url时提示“无法建立 SSL 连接” 原因: wget在使用HTTPS协议时,默认会去验证网站的证书,而这个证书验证经常会失败 解决方案: 1.加上参数“--no-check ...
- js数组去重练习
- Oracle 五笔码函数
五笔码 select comm.fun_spellcode_wb('数据库') from dual 结果:ORY 函数 CREATE OR REPLACE FUNCTION COMM.FUN_SPEL ...
- soapui基础知识
一.基础知识 1.测试步骤(teststep)为最小单位,一个完整的测试用例由多个测试步骤组成: 2.一个测试用例(testcase)代表一个完整的操作 3.测试集(testsuite)主要是为了区分 ...
- 基于React Native的跨三端应用架构实践
作者|陈子涵 编辑|覃云 “一次编写, 到处运行”(Write once, run anywhere ) 是很多前端团队孜孜以求的目标.实现这个目标,不但能以最快的速度,将应用推广到各个渠道,而且还能 ...
- javascript笔记 (持续更新)
1. 语言主要分为两大类:编译型语言和解释型语言. 对于静态语言来说(如Java.C++.C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器( ...
- 通信矩阵转DBC
DBC的制作对于一些人来时比较陌生,熟悉的人做他感觉浪费时间(像我这样的),于是自己用PYTHON写了一个脚本,还挺好用的,只需要填写表格就好了,省出来大部分的时间. 分享下思路, 来看下DBC的文本 ...