| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
哪里WA了 求大神指教#include<stdio.h> #include<string.h> #include<stdlib.h> #include<limits.h> #include<vector> #define min(a,b) (a)<(b)?(a):(b) using namespace std; struct node { int to,ca,re; }; typedef vector<node> edge; edge G[1000]; bool used[1000]; void add_edge(int s,int t,int c) { G[s].push_back((node){t,c,G[t].size()}); G[t].push_back((node){s,0,G[s].size()-1}); } int dfs(int v,int t,int f) { if(v==t) return f; used[v]=true; for(int i=0;i<G[v].size();i++) { if(!used[G[v][i].to]&&G[v][i].ca>0) { int d=dfs(G[v][i].to,t,min(G[v][i].ca,f)); if(d>0) { //printf("%d ",v); G[v][i].ca-=d; G[G[v][i].to][G[v][i].re].ca+=d; return d; } } } return 0; } int max_flow(int s,int t) { int flow=0; while(true) { memset(used,false,sizeof(used)); int f=dfs(s,t,INT_MAX); //printf("\n"); if(f==0) return flow; flow+=f; } } int main() { /*add_edge(0,1,10); add_edge(0,2,2); add_edge(1,2,6); add_edge(1,3,6); add_edge(2,4,5); add_edge(3,2,3); add_edge(3,4,8); printf("%d",max_flow(0,4));*/ int n,f,d; scanf("%d%d%d",&n,&f,&d); int s=n*2+d+f,t=n*2+d+f+1; for(int i=0;i<f;i++) { add_edge(s,n*2+i,1); } for(int i=0;i<d;i++) { add_edge(n+2+f+i,t,1); } for(int i=0;i<n;i++) { add_edge(i,n+i,1); int tf,td; scanf("%d%d",&tf,&td); for(int j=0;j<tf;j++) { int tmp; scanf("%d",&tmp);tmp--; add_edge(n*2+tmp,i,1); } for(int j=0;j<td;j++) { int tmp; scanf("%d",&tmp);tmp--; add_edge(n+i,n*2+f+tmp,1); } } /*for(int i=0;i<n*2+f+d+2;i++) { printf("%d|",i); for(int j=0;j<G[i].size();j++) { printf("%d ",G[i][j].to); } printf("\n"); }*/ printf("%d\n",max_flow(s,t)); } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator