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 |
样例都过了,为什么还没A?!!#include <cstdio> #include <iostream> #include <cstring> using namespace std; #define INF 99999999 int n,p,f; int flow[55][55]; int map[55][55]; int input[55][12]; int output[55][12];///1-n node ,0 source ,n destination int perf[55]; int a[55]; int q[55]; int pre[55]; int min(int a,int b) { return a<b?a:b;} bool bfs() { memset(a,0,sizeof(a)); memset(q,0,sizeof(q)); memset(pre,0,sizeof(pre)); int head,tail; head=tail=0; q[tail++]=0; a[0]=INF; while(head<tail) { int u=q[head++]; for(int v=0;v<=n+1;++v) if(!a[v]&&map[u][v]>flow[u][v]) { a[v]=min(a[u],map[u][v]-flow[u][v]); pre[v]=u; if(v==n+1) return true; q[tail++]=v; } } return false; } void maxflow() { while(bfs()) { for(int u=n+1;u!=0;u=pre[u]) { flow[pre[u]][u]+=a[n+1]; flow[u][pre[u]]-=a[n+1]; } f+=a[n+1]; } } int main () { while(scanf("%d%d",&p,&n)!=EOF) { f=0; memset(input,0,sizeof(input)); memset(output,0,sizeof(output)); memset(map,0,sizeof(map)); memset(flow,0,sizeof(flow)); // initialize for(int i=1;i<=n;++i) { scanf("%d",&perf[i]); for(int j=1;j<=p;++j) //jth part input scanf("%d",&input[i][j]); for(int j=1;j<=p;++j) scanf("%d",&output[i][j]); // jth part output } for(int i=1;i<=n;++i) for(int j=1;j<=n;++j)/// jth output to ith { if(i==j) continue; bool flag=true; for(int k=1;k<=p;++k) if(input[i][k]!=2&&input[i][k]!=output[j][k]) {flag=false;break;} if(flag)//create edge { map[j][i]=min(perf[j],perf[i]); } } for(int i=1;i<=n;++i) { bool flag=true; for(int k=1;k<=p;++k) if(input[i][k]==1) flag=false; if(flag) map[0][i]=perf[i]; //0 2 true } for(int i=1;i<=n;++i) { bool flag=true; for(int k=1;k<=p;++k) if(output[i][k]==0) flag=false; if(flag) map[i][n+1]=perf[i]; } maxflow(); int num=0; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(flow[i][j]&&map[i][j]) num++; printf("%d %d\n",f,num); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(flow[i][j]&&map[i][j]) { printf("%d %d %d\n",i,j,flow[i][j]); } } system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator