hdu 4292 网络流
2014-01-17 23:46
441 查看
#include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cstring> using namespace std; const int inf=1<<29; const int maxn=2000,maxm=500000; #define min(a,b) a>b?b:a struct edge { int v,f,nxt; }; bool vis[maxn+10]; //是否被访问 int dist[maxn+10]; //层数 int src,sink; int g[maxn+10]; int nume; edge e[maxm*2+10]; void add(int u,int v,int f) { e[++nume].v=v; e[nume].f=f; e[nume].nxt=g[u]; g[u]=nume; e[++nume].v=u; e[nume].f=0; e[nume].nxt=g[v]; g[v]=nume; } void bfs() { queue<int >que; memset(dist,0,sizeof(dist)); while(!que.empty()) que.pop(); que.push(src); vis[src]=true; while(!que.empty()){ int u=que.front(),i; que.pop(); for(i=g[u]; i; i=e[i].nxt){ if(e[i].f&&!vis[e[i].v]){ que.push(e[i].v); dist[e[i].v]=dist[u]+1; vis[e[i].v]=true; } } } } int dfs(int u ,int delta) { int i; if(u == sink) return delta; else{ int ret=0; for(i=g[u]; 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 dinic(){ int ret=0; while(true){ memset(vis,0,sizeof(vis)); bfs(); if(!vis[sink]) return ret; ret+=dfs(src,inf); } } int main() { int food[300],drink[300]; int i,j,n,f,d; while(scanf("%d%d%d",&n,&f,&d)!=EOF){ nume=1; memset(g,0,sizeof(g)); for(i=0;i<f;i++) scanf("%d",&food[i]); for(i=0;i<d;i++) scanf("%d",&drink[i]); getchar(); int scr=0; sink=f+2*n+d+1; char temp; for(i=0;i<f;i++) add(scr,i+1,food[i]); for(i=0;i<d;i++) add(2*n+f+1+i,f+2*n+d+1,drink[i]); for(i=0;i<n;i++) add(f+1+i,f+1+n+i,1); for(i=0;i<n;i++){ for(j=0;j<f;j++){ scanf("%c",&temp); if(temp=='Y') add(j+1,f+1+i,1); } getchar(); } for(i=0;i<n;i++){ for(j=0;j<d;j++){ scanf("%c",&temp); if(temp=='Y') add(f+n+1+i,f+2*n+j+1,1); } getchar(); } printf("%d\n",dinic()); } }
相关文章推荐
- hdu 4292(网络流)Food
- HDU-4292-网络流最大流
- hdu 4292 Food 【图论-网络流-最大流-Dinic】
- HDU 4292 Food (成都赛区网络赛第五题,拆点网络流)
- hdu 4292(拆点的网络流)
- HDU 4292 Food 网络流建图
- HDU-4292 Food 简单网络流
- HDU 4292 Food(网络流) #by zh
- Hdu 4292 Food (2012成都赛区网络赛第五题,拆点网络流)
- HDU 4292 网络流 Food
- hdu 4292 Food【拆点网络流】
- HDU 4292 Food (网络流,最大流)
- Food (hdu 4292 网络流sap模板题)
- HDU 4292 FOOD 网络流
- hdu 4292 拆点+简单网络流
- HDU 4292 Food 网络流最大流 拆点
- hdu 4292 拆点+简单网络流
- hdu 4292 Food 网络流
- HDU 4292 Food [网络流]
- HDU 4292 Food 图论,网络流,建模