标签:des style color java os io strong for
5 6 5 3 5 2 3 4 12 1 5 5 4 2 3 2 4 4 3 2 1
3
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 1000;
const int maxe = 20000*10;
const int inf = 1<<30;
int n,m,s,d;
int src,sink;
queue<int> que;
bool vis[maxn];
int dist[maxn];
struct edge{
int v,f,nxt;
}e[maxe];
int head[maxn];
int nume;
void addedge(int u,int v,int w){
e[++nume].nxt = head[u];
e[nume].v = v;
e[nume].f = w;
head[u] = nume;
e[++nume].nxt = head[v];
e[nume].v = u;
e[nume].f = 0;
head[v] = nume;
}
void bfs(){
memset(dist,0,sizeof dist);
while(!que.empty()) que.pop();
vis[src] = true;
que.push(src);
while(!que.empty()){
int u = que.front();
que.pop();
for(int i = head[u]; i ; i = e[i].nxt){
if(e[i].f && !vis[e[i].v]){
que.push(e[i].v);
vis[e[i].v] = 1;
dist[e[i].v] = dist[u]+1;
}
}
}
}
int dfs(int u,int delta){
if(u== sink) return delta;
else{
int ret = 0;
for(int i = head[u]; delta&&i; i = e[i].nxt){
if(e[i].f && dist[e[i].v] == dist[u]+1){
int dd = dfs(e[i].v,min(e[i].f,delta));
e[i].f -= dd;
e[i^1].f += dd;
delta -= dd;
ret += dd;
}
}
return ret;
}
}
int maxflow(){
int ret = 0;
while(true){
memset(vis,0,sizeof vis);
bfs();
if(!vis[sink]) return ret;
ret += dfs(src,inf);
}
}
void init(){
memset(head,0,sizeof head);
nume = 1;
}
int main(){
while(~scanf("%d%d",&n,&m)){
init();
scanf("%d%d",&s,&d);
src = 2*s-1;
sink = 2*d;
for(int i = 1; i <= n; i++){
int t;
scanf("%d",&t);
addedge(i*2-1,i*2,t);
}
while(m--){
int a,b;
scanf("%d%d",&a,&b);
addedge(a*2,2*b-1,inf);
addedge(2*b,a*2-1,inf);
}
printf("%d\n",maxflow());
}
return 0;
}
HDU4289-Control(最小割定理),布布扣,bubuko.com
标签:des style color java os io strong for
原文地址:http://blog.csdn.net/mowayao/article/details/38585145