UVA10330拆点最大流
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = 1000;
const int maxm = 100000;
const int inf = 10000000;
struct node{
int v,flow,next;
}edge[maxm];
int head[maxn],dis[maxn];
int id,s,t,n,m;
void add_edge(int u,int v,int flow){
edge[id].v = v;edge[id].flow = flow;edge[id].next =head[u];head[u] = id++;
edge[id].v = u;edge[id].flow = 0 ;edge[id].next =head[v];head[v] = id++;
}
void init(){
int flow;
s = 0,t = n*2+2;//设置源点和汇点
memset(head,-1,sizeof(head));id = 0;
for(int i = 1; i <= n; i++){//拆点
scanf("%d",&flow);
add_edge(i,i+n,flow);
}
scanf("%d",&m);
int u,v;
while( m-- ){
scanf("%d%d%d",&u,&v,&flow);
add_edge(u+n,v,flow);
}
int b,d;
scanf("%d%d",&b,&d);
while( b-- ){
scanf("%d",&v);
add_edge(s,v,inf);
}
while( d --){
scanf("%d",&u);
add_edge(u+n,t,inf);
}
}
bool bfs(){
memset(dis,-1,sizeof(dis));
queue<int>que;
dis[s] = 0;
que.push(s);
while(!que.empty()){
int u = que.front();
que.pop();
for(int id = head[u]; id != -1; id = edge[id].next){
int v = edge[id].v;
if(edge[id].flow > 0 && dis[v] == -1 ){
dis[v] = dis[u] + 1;
que.push(v);
}
}
}
return dis[t] != -1;
}
int dinic(int u,int flow){
if( u == t || flow == 0)return flow;
int tmp = flow;
for(int id = head[u]; id != -1; id = edge[id].next){
int v = edge[id].v;
if( edge[id].flow > 0 && dis[v] == dis[u] + 1){
int tt = dinic(v,min(tmp,edge[id].flow));
tmp -= tt;
edge[id].flow -= tt;
edge[id^1].flow += tt;
if(tmp == 0)break;
}
}
return flow - tmp;
}
int main(){
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n)){
init();
int max_flow = 0;
while(bfs())
max_flow += dinic(s,inf);
printf("%d\n",max_flow);
}
return 0;
}
UVA10330拆点最大流的更多相关文章
- hdu4289 最小割最大流 (拆点最大流)
最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ...
- Control(拆点+最大流)
Control http://acm.hdu.edu.cn/showproblem.php?pid=4289 Time Limit: 2000/1000 MS (Java/Others) Mem ...
- BZOJ 1877 晨跑 拆点费用流
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1877 题目大意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧 ...
- Risk UVA - 12264 拆点法+最大流+二分 最少流量的节点流量尽量多。
/** 题目:Risk UVA - 12264 链接:https://vjudge.net/problem/UVA-12264 题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai ...
- HDU 3572 Task Schedule(拆点+最大流dinic)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- POJ 2391 Ombrophobic Bovines ★(Floyd+二分+拆点+最大流)
[题意]有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 和POJ2112很类 ...
- CF 277E Binary Tree on Plane (拆点 + 费用流) (KM也可做)
题目大意: 平面上有n个点,两两不同.现在给出二叉树的定义,要求树边一定是从上指向下,即从y坐标大的点指向小的点,并且每个结点至多有两个儿子.现在让你求给出的这些点是否能构成一棵二叉树,如果能,使二叉 ...
- 【拆点费用流】【HDU1853】【 Cyclic Tour】
题意: 有N个城市,M条单向路,Tom想环游全部城市,每次至少环游2个城市,每个城市只能被环游一次.由于每条单向路都有长度,要求游遍全部城市的最小长度. // 给定一个有向图,必须用若干个环来覆盖整个 ...
- [SPOJ962]Intergalactic Map 拆点+最大流
Jedi knights, Qui-Gon Jinn and his young apprentice Obi-Wan Kenobi, are entrusted by Queen Padmé Ami ...
随机推荐
- TypeScript环境安装,以及配置idea开发环境
安装前准备 安装typescript需要用到npm管理工具,而npm是随同Node.js一起安装的包管理工具,所以要先安装Node 1.前往Node官网下载最新版安装包:http://nodejs.c ...
- oracle一条语句插入多个值的方法
今天在实践过程中遇到一个问题, 我想往数据库插入多条数据时,使用了如下语句: insert into 表1 (字段1,字段2) values (1,2),(2,3),(3,4); 这条语句在mysql ...
- PID算法资料【视频+PDF介绍】
最近一直有网友看到我的博客后,加我好友,问我能不能给发一些PID的资料,今天找了一些资料放到百度网盘上,给大家下载: 视频资料 链接:https://pan.baidu.com/s/12_IlLgBI ...
- Another option to bootup evidence files
When it comes to booting up evidence files acquired from target disk, you got two options. One is VF ...
- 记一次使用LR测试UDP和TCP的过程
背景 最近项目要做性能测试,要出要一份性能报告,让我出一个有关Tcp和Udp的功能模块的测试,流程大概是这样,先走TCP协议协商一下会话,协商成功后走Udp收发数据. 有点简单啊,自己写个功能模块测一 ...
- python_0基础开始_day05
第五节 一.字典 python的数据结构之一 字典 —— dict 定义:dic = {"key":"dajjlad"} 作用:存储数据,大量,将数据和数据起到 ...
- Selenium+java - 日期控件的处理
前言 一般的日期控件都是input标签下弹出来的,设置日期使用selenium中的sendKeys 方法就可以解决. 但是我们也会碰到下面的时间日期控件(这个时候这个文本框是不允许我们输入时间的)如图 ...
- SpringBoot 使用JPA时解决no session的方法
1.在application.yml中添加 spring.jpa.open-in-view: true 2.在使用查询的方法添加 @Transactional
- Python中input()的使用方法
input()以字符串的方式获取用户输入: >>> x = input() 4.5 >>> type(x) <class 'str'> >> ...
- Selenium+Java - 结合sikuliX操作Flash网页
前言 前天被一个Flash的轮播图,给玩坏了,无法操作,后来请教了下crazy总拿到思路,今天实践了下,果然可以了,非常感谢! 模拟场景 打开百度地图 切换城市到北京 使用测距工具 测量 奥林匹克森林 ...