飛行員配對方案問題
阿新 • • 發佈:2018-07-05
水過 bits fine || cin clas name gist spa
二分圖匹配即可水過
沒什麽可說的
//Writer:jr HSZ;%%%WJMZBMR #include<bits/stdc++.h> #define LL long long #define reg register int #define f(i,a,b) for(reg i=a;i<=b;i++) using namespace std; int m,n,ans; int match[2005]; bool used[2005]; struct E { int nxt,to; } e[2005]; int head[2005],cnt; void add(int bg,int ed) { e[++cnt].nxt=head[bg]; e[cnt].to=ed; head[bg]=cnt; } bool dfs(int x) { for(int i=head[x]; i; i=e[i].nxt) { int v=e[i].to; if(!used[v]) { used[v]=1; if(!match[v]||dfs(match[v])) { match[v]=x; return 1; } } } return 0; } int u,v; int main() { cin>>n>>m; for(;;) { scanf("%d%d",&u,&v); if(u==-1&&v==-1)break; add(u,v); } for(int i=1; i<=n; i++) { memset(used,0,sizeof used); if(dfs(i))ans++; } if(!ans)cout<<"No Solution!"; else { cout<<ans<<endl; f(i,1,m) { if(match[i]) printf("%d %d\n",match[i],i); } } return 0; }
飛行員配對方案問題