UVa 10330 - Power Transmission(最大流--拆点)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1271
题目:普通的网络流模型加多了一个每个节点的流量限制。
刚开始的时候是直接找增广路,顺便更新节点的容量,但是证明不了其正确性,WA了,大概这种做法是错的。
正解:将每个点拆成两个点,并且这两个点构成的边的容量是该点容量,这样就保证流过的流量不大于该点容量。
/*
*Author: Zhaofa Fang
*Created time: 2013-07-16-20.00
*Language: C++
*/
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <utility>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std; typedef long long ll;
#define DEBUG(x) cout<< #x << ':' << x << endl
#define FOR(i,s,t) for(int i = (s);i <= (t);i++)
#define FORD(i,s,t) for(int i = (s);i >= (t);i--)
#define REP(i,n) for(int i=0;i<(n);i++)
#define REPD(i,n) for(int i=(n-1);i>=0;i--)
#define PII pair<int,int>
#define PB push_back
#define MP make_pair
#define ft first
#define sd second
#define lowbit(x) (x&(-x))
#define INF (1<<30)
#define eps 1e-8 const int maxn = ;
const int maxm = ;
struct Edge{
int v,cap,flow,next;
}edge[maxm];
int eh[maxn],tot;
bool vist[maxn];
int d[maxn]; void init(){
tot = ;
memset(eh,-,sizeof(eh));
}
void addedge(int u,int v,int c){
Edge e = {v,c,,eh[u]};
edge[tot] = e;
eh[u] = tot ++;
}
void add(int u,int v,int c){
addedge(u,v,c);
addedge(v,u,);
}
bool BFS(int s,int t){
memset(vist,,sizeof(vist));
queue<int>Q;
Q.push(s);
vist[s] = ;
d[s] = ;
while(!Q.empty()){
int u = Q.front();
Q.pop();
for(int i=eh[u];i!=-;i=edge[i].next){
int v = edge[i].v;
if(!vist[v] && edge[i].cap > edge[i].flow){
vist[v] = ;
d[v] = d[u] + ;
Q.push(v);
if(v == t)return true;
}
}
}
return false;
}
int DFS(int u,int t,int avi){
if(u == t || avi == )return avi;
int flow = ,f;
for(int i=eh[u];i!=-;i=edge[i].next){
int v = edge[i].v;
if(d[v] == d[u]+ && (f=DFS(v,t,min(avi,edge[i].cap-edge[i].flow)))>){
edge[i].flow += f;
edge[i^].flow -= f;
flow += f;
avi -= f;
if(avi == )break;
}
}
return flow;
}
int maxFlow(int s,int t){
int flow = ;
while(BFS(s,t)){
flow += DFS(s,t,INF);
}
return flow;
}
int main(){
//freopen("in","r",stdin);
//freopen("out","w",stdout);
int n;
while(~scanf("%d",&n)){
int u,v,c,m;
init();
REP(i,n){
scanf("%d",&c);
add(i+,n+i+,c);
}
scanf("%d",&m);
while(m--){
scanf("%d%d%d",&u,&v,&c);
add(n+u,v,c);
}
int B,D;
scanf("%d%d",&B,&D);
while(B--){
scanf("%d",&u);
add(,u,INF);
}
while(D--){
scanf("%d",&u);
add(n+u,*n+,INF);
}
printf("%d\n",maxFlow(,*n+));
}
return ;
}
UVa 10330 - Power Transmission(最大流--拆点)的更多相关文章
- UVa 10330 Power Transmission / 最大流
最大流 这题有很多起点和终点 在取2个点(0和n+1) 作为唯一的起点和终点 此外每个点也有容量限制 建图时每条边上的容量为这条边和2个端的容量的最小值 然后EK就行 #include <cst ...
- uva 10330 - Power Transmission(网络流)
uva 10330 - Power Transmission 题目大意:最大流问题. 解题思路:増广路算法. #include <stdio.h> #include <string. ...
- UVA 10330 Power Transmission
题意:懒得打了.LUCKY CAT 里有 http://163.32.78.26/homework/q10330.htm 第一个网络流题目.每个节点都有一个容量值.需要拆点.拆成i - > i ...
- light oj 1155 - Power Transmission【拆点网络流】
1155 - Power Transmission PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...
- lightoj--1155-- Power Transmission (最大流拆点)
Power Transmission Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Sub ...
- poj 3498 March of the Penguins(最大流+拆点)
题目大意:在南极生活着一些企鹅,这些企鹅站在一些冰块上,现在要让这些企鹅都跳到同一个冰块上.但是企鹅有最大的跳跃距离,每只企鹅从冰块上跳走时会给冰块造成损害,因此企鹅跳离每个冰块都有次数限制.找出企鹅 ...
- UVA 11149 - Power of Matrix(矩阵乘法)
UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...
- poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分, dinic, isap
poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分 dinic /* * Author: yew1eb * Created Time: 2014年10月31日 星期五 ...
- C2. Power Transmission (Hard Edition)(线段相交)
This problem is same as the previous one, but has larger constraints. It was a Sunday morning when t ...
随机推荐
- Struts2 注解(转)
转自:http://blog.csdn.net/wwwqvod/article/details/6214431 也叫Zero Configuration(零配置),它省去了写xml文件的麻烦,可以直接 ...
- 在 Linux ubuntu 上安装 *.sh 文件
简单说来就两步: 增加可执行权限 执行 事情是这样的,打算在 ubuntu 上安装一个 NetBeans IDE 来学习 Java,但是下载下来的文件是 .sh 格式的.图形界面下右键没有执行的选项. ...
- Delphi中的消息截获(六种方法:Hook,SubClass,Override WndProc,Message Handler,RTTI,Form1.WindowProc:=@myfun)good
Windows是一个基于消息驱动的系统,因此,在很多时候,我们需要截获一些消息然后自己进行处理.而VCL系统又有一些特定的消息.下面对我所了解的delphi环境中截获消息进行一些总结. 就个 ...
- rhel6.4 配置本地yum的源
1 创建rhel-debuginfo.repo,如果有则先备份再删除 cd /etc/yum.repos.d rm rhel-debuginfo.repo vi rhel ...
- Java调用.dll文件
因为项目的需求,要在JAVA项目中调用Windows的Dll(动态链接库)文件,之前用Jni调用过C写的Dll文件,比较麻烦,这里不多说,网上也有很多这方面的文档.在网上找到一个开源的组件JNativ ...
- java web基础环境搭建
java web基础环境包括:(1)servlet容器也即tomcat(2)jre即java程序运行环境 环境变量配置:分别下载jdk和tomcat安装包. jdk环境变量配置: 第一步:系统环境变量 ...
- ceph for openstack快速部署实施
for el6 即centos6 1,添加ceph 官方yum源 [root@ruiy ~]# cat /etc/yum.repos.d/ceph.repo[ceph-noarch]name=Ceph ...
- Sublime Text 增加CoffeeScript、Jade and Stylus syntax高亮
切换到Sublime Text Packages 目录: Liunx系统: cd ~/Library/Application\ Support/Sublime\ Text\ /Packages win ...
- ORACLE函数TO_CHAR以及数字转换格式[Z]
本来这是很简单的函数,但在屡次忘记格式之后,决定还是翻译一遍以铭记在心. 参考<<Oracle Database SQL Reference>>. 关于nl ...
- JavaScript的一点简介(注:本文诸多观点源于JavaScript高级程序设计,如有侵权,立即删除)
JavaScript是一门最易让人误解的语言,该语言中精华与糟粕并存(可能比一般语言的这个比例要大一些):但“千淘万漉虽辛苦,吹尽黄沙始到金”,层层面纱下是易用灵活.优雅轻灵的内在.很久以前,Java ...