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 |
为什么超时。。小菜鸟求解释。。。(附代码)#include<stdio.h> #include<algorithm> #include<vector> #include<queue> #define inf 99999999 using namespace std; int map[1005][1005],pre[1005]; vector<int>g[1005]; int n,m,S,T; void build(int mid) { int i,j; S=0; T=n+m+1; memset(map,0,sizeof(map)); for(i=1;i<=n;i++) map[S][i]=1; for(i=1;i<=n;i++) for(j=0;j<g[i].size();j++) map[i][g[i][j]+n+1]=1; for(i=n+1;i<=n+m;i++) map[i][T]=mid; } bool bfs() { int i,now; memset(pre,-1,sizeof(pre)); queue<int>q; q.push(S); while(!q.empty()) { now=q.front(); q.pop(); for(i=0;i<=T;i++) { if(pre[i]==-1&&map[now][i]>0) { pre[i]=now; if(i==T) return true; q.push(i); } } } return false; } int EK() { int i,flow=0,min; while(bfs()) { min=inf; for(i=T;i!=S;i=pre[i]) if(map[pre[i]][i]<min) min=map[pre[i]][i]; // printf("%d\n",min); for(i=T;i!=S;i=pre[i]) { map[pre[i]][i]=map[pre[i]][i]-min; map[i][pre[i]]=map[i][pre[i]]+min; } flow=flow+min; } return flow; } void init() { int i; for(i=0;i<1005;i++) g[i].clear(); } int main() { int i,j,left,right,mid; char str[100],c; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; init(); for(i=1;i<=n;i++) { scanf("%s",str); while(1) { scanf("%d",&j); g[i].push_back(j); scanf("%c",&c); if(c=='\n') break; } } left=0; right=n; while(left<=right) { mid=(left+right)>>1; build(mid); int temp=EK(); printf("%d %d\n",mid,temp); if(temp==n) right=mid-1; else left=mid+1; } printf("%d\n",left); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator