【poj1459】Power Network【模板题】【最大流】
2015-02-18 14:38
405 查看
传送门:http://poj.org/problem?id=1459
别的没啥好说的,就是另设一个超级源S和超级汇T,把所有Power Station连到S上,把所有Consumer连到T上,然后Dinic一下就行了~
(我数组又开小了T_T)
别的没啥好说的,就是另设一个超级源S和超级汇T,把所有Power Station连到S上,把所有Consumer连到T上,然后Dinic一下就行了~
(我数组又开小了T_T)
#include<cstdio> #include<cstring> #include<iostream> #include<queue> using namespace std; struct Dinic{ #define fill(x,y) memset(x,y,sizeof(x)) static const int maxn=110; int s,t,tot; typedef int arr[maxn*maxn<<1];//FUCK。。。又开小了。。 arr cap,flow,toit,next; bool visit[maxn]; int cur[maxn]; int dis[maxn]; int list[maxn]; Dinic():tot(0){ fill(cap,0); fill(flow,0); fill(toit,0); fill(next,-1); fill(visit,false); fill(cur,-1); fill(dis,0); fill(list,-1); } inline void add(int from,int to,int _cap){ next[tot]=list[from]; list[from]=tot; toit[tot]=to; cap[tot]=_cap; tot++; } inline bool bfs(){ queue<int>q; fill(visit,false); q.push(s); visit[s]=true; dis[s]=0; int h; while(!q.empty()){ h=q.front(); q.pop(); for(int k=list[h];k!=-1;k=next[k]){ if(!visit[toit[k]]&&cap[k]>flow[k]){ visit[toit[k]]=true; dis[toit[k]]=dis[h]+1; q.push(toit[k]); } } } return visit[t]; } inline int dfs(int x,int a){ if(x==t||!a) return a; int Flow=0,f; for(int &i=cur[x];i!=-1;i=next[i]){ int to=toit[i]; if(dis[to]==dis[x]+1&&(f=dfs(to,min(a,cap[i]-flow[i])))>0){ flow[i]+=f; flow[i^1]-=f; Flow+=f; a-=f; if(!a) break; } } return Flow; } inline int maxFlow(int s,int t){ this->s=s,this->t=t; int ans=0; while(bfs()){ // cout<<"hehe"; memcpy(cur,list,sizeof cur); ans+=dfs(s,0x1f1f1f1f); } return ans; } }; int main(){ int n,np,nc,m,u,v,z; while(scanf("%d%d%d%d",&n,&np,&nc,&m)==4){ Dinic QuestionAnswer; while(m--){ scanf("%*[\n (]%d%*[,]%d%*[)]%d%*[ \n]",&u,&v,&z); QuestionAnswer.add(u,v,z); QuestionAnswer.add(v,u,0); } while(np--){ scanf("%*[\n (]%d%*[)]%d%*[ \n]",&u,&z); QuestionAnswer.add(n+1,u,z); QuestionAnswer.add(u,n+1,0); } while(nc--){ scanf("%*[\n (]%d%*[)]%d%*[ \n]",&u,&z); QuestionAnswer.add(n+2,u,0); QuestionAnswer.add(u,n+2,z); } printf("%d\n",QuestionAnswer.maxFlow(n+1,n+2)); } return 0; }
相关文章推荐
- POJ 1459 Power Network(网络最大流,dinic算法模板题)
- poj 1459 Power Network(网络流 最大流 dinic模板题)
- POJ 1459 Power Network(最大流+dinic算法模板)
- poj 1459 Power Network 最大流,模板题
- POJ1459-Power Network-网络流-最大流(EK模板题)
- 【最大流 模板 Dinic】POJ 1459 Power Network
- (模板题)poj 1459 Power Network(Edmonds-Karp算法求最大流)
- POJ - 1459 Power Network(最大流)(模板)
- POJ-1459 Power Network【最大流】
- poj 1459 Power Network 最大流
- POJ1459--Power Network--最大流增光路算法
- POJ1459--Power Network(最大流)
- Poj 1459 Power Network 最大流
- 【最大流+dinic】北大 poj 1459 Power Network
- poj 1459 Power Network : 最大网络流 dinic算法实现
- poj 1459 Power Network 最大流
- POJ 1459 Power Network 网络流模板题
- poj 1459 Power Network(最大流)
- poj 1459 Power Network(最大流)
- POJ 1459 Power Network 最大流水题