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 <iostream> #include <stdio.h> #include <string.h> #include <queue> using namespace std; #define INF 0x7f7f7f7f #define T 2*N+1 #define min(a,b) ((a)<(b))?(a):(b) struct Machine{ int Q,input[11],output[11]; }machine[55]; int P,N; int map[150][150]; bool visit[150]; int layer[150]; int sta[150]; int ans,size,num; struct Conection { int x,y; int dd; }conection[30000]; int coun; void input() { int i,j; for(i=1;i<=N;i++) { cin>>machine[i].Q; for(j=0;j<P;j++) cin>>machine[i].input[j]; for(j=0;j<P;j++) cin>>machine[i].output[j]; map[i][i+N]+=machine[i].Q; } } bool judge(int in[10],int out[10]) { int i; for(i=0;i<P;i++) { if(in[i]==out[i]||in[i]==2||out[i]==2) continue; return false; } return true; } void build() { int i,j; for(i=1;i<=N;i++) { for(j=i+1;j<=N;j++) { if(judge(machine[i].input,machine[j].output)) map[j+N][i]=INF; if(judge(machine[i].output,machine[j].input)) map[i+N][j]=INF; } bool flag1=true; bool flag2=true; for(j=0;j<P;j++) { if(machine[i].input[j]==1) { flag1=false; } if(machine[i].output[j]!=1) { flag2=false; } } if(flag1)map[0][i]=INF; if(flag2)map[i+N][T]=INF; } } void out() { int i; for(i=0;i<=coun;i++) { cout<<conection[i].x<<" "<<conection[i].y<<" "<<conection[i].dd<<endl; } } bool dfs(int s,int t) { //cout<<"eee"<<endl; bool temp; sta[size]=s; if(s==t) { int d=INF; for(int i=0;i<size;i++) { if(map[sta[i]][sta[i+1]]<d) { d=map[sta[i]][sta[i+1]]; num=sta[i]; } } ans+=d; for(int i=0;i<size;i++) { map[sta[i]][sta[i+1]]-=d; map[sta[i+1]][sta[i]]+=d; if(0<sta[i]&&sta[i]<T&&sta[i+1]>0&&sta[i+1]<T) { if((sta[i]%N)!=(sta[i+1]%N)) { ++coun; if(sta[i]%N==0) { conection[coun].x=N; conection[coun].y=sta[i+1]%N; } if(sta[i+1]%N==0) { conection[coun].x=sta[i]%N; conection[coun].y=N; } else { conection[coun].x=sta[i]%N; conection[coun].y=sta[i+1]%N; } conection[coun].dd=d; } } } return 1; } for(int i=0;i<=T;i++) { if(layer[i]==layer[s]+1&&map[s][i]>0) { size++; temp=dfs(i,t); size--; if(temp&&num!=s)return 1; } } return 0; } bool bfs(int s,int t) { int p; queue<int>Q; memset(visit,false,sizeof(visit)); memset(layer,-1,sizeof(layer)); layer[s]=0; Q.push(s); visit[s]=true; while(!Q.empty()) { p=Q.front(); Q.pop(); for(int i=1;i<=T;i++) { if(map[p][i]>0&&!visit[i]) { layer[i]=layer[p]+1; visit[i]=true; if(i==t)return true; Q.push(i); } } } return false; } int Dinic(int s,int t) { int Maxflow=0; while(bfs(s,t)) { size=0;ans=0; dfs(s,t); Maxflow+=ans; } return Maxflow; } int main() { //freopen("in.txt","r",stdin); while(cin>>P>>N) { memset(map,0,sizeof(map)); input(); build(); coun=-1; cout<<Dinic(0,T)<<" "; cout<<coun+1<<endl; out(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator