标签:
Codevs上的Special Judge似乎挂了 所以就跑到COGS上交 http://cojs.tk/cogs/problem/problem.php?pid=14
14. [网络流24题] 搭配飞行员
★★☆ 输入文件:flyer.in
输出文件:flyer.out
简单对比
时间限制:1 s 内存限制:128 MB
#include<cstdio> #define inf 214748263 #include<iostream> #include<algorithm> #include<queue> #define N 500 #include<cstring> using namespace std; int dis[250],n,m,ans,tot=1,a,b,c,i,head[N],nn; struct Edge{ int to,next,w; }e[N<<1]; inline void ins(int u,int v,int w){ e[++tot].w=w; e[tot].to=v; e[tot].next=head[u]; head[u]=tot; } int bfs() { memset(dis,-1,sizeof(dis)); dis[1]=0; queue<int>q; q.push(1); while(!q.empty()) { int now=q.front(); q.pop(); for(int k=head[now];k;k=e[k].next) if (dis[e[k].to]<0 && e[k].w>0) { dis[e[k].to]=dis[now]+1; q.push(e[k].to); } } if (dis[m]>0) return 1; else return 0; } int find(int x,int low) { if(x==m)return low; int a; for(int k=head[x];k;k=e[k].next) if(e[k].w>0 && dis[e[k].to]==dis[x]+1 && (a=find(e[k].to,min(low,e[k].w)))) { e[k].w-=a; e[k^1].w+=a; return a; } return 0; } int main () { freopen("flyer.in","r",stdin); freopen("flyer.out","w",stdout); scanf("%d%d",&nn,&n); nn-=n; m=1+n+nn+1; for(i=1;i<=n;i++) ins(1,1+i,1),ins(i+1,1,0); for(i=1;i<=nn;i++) ins(1+n+i,m,1),ins(m,1+n+i,0); while(scanf("%d%d",&a,&b)!=EOF) { ++a; ++b; ins(a,b,1); ins(b,a,0); } while (bfs()) { while(tot=find(1,inf)) ans+=tot; } printf("%d",ans);fclose(stdin); fclose(stdout); }
标签:
原文地址:http://www.cnblogs.com/Bloodline/p/5093956.html