二分图——洛谷P2756 飞行员配对方案问题

来源:互联网 发布:js radio 取值 编辑:程序博客网 时间:2024/05/16 09:06

这道题用匈牙利算法直接水掉的;
毕竟匈牙利本来就是记录方案的;
但是你用网络流这个就不简单了;
另外匈牙利可以先模版题;
然后这一题好像没有No Solution!

#include<bits/stdc++.h>using namespace std;const int N=105;struct cs{int to,nxt;}a[N*N*5];bool vi[N];int head[N],ll;int link[N];int m,n,ans,x,y;bool dfs(int x){    for(int k=head[x];k;k=a[k].nxt)        if(!vi[a[k].to]){            vi[a[k].to]=1;            if(!link[a[k].to]||dfs(link[a[k].to])){                link[a[k].to]=x;return 1;            }        }return 0;}int main(){    scanf("%d%d",&m,&n);    for(scanf("%d%d",&x,&y);x!=-1;scanf("%d%d",&x,&y)){        a[++ll].to=y;        a[ll].nxt=head[x];        head[x]=ll;    }    for(int i=1;i<=m;i++){        memset(vi,0,sizeof vi);        if(dfs(i))ans++;    }    if(!ans){printf("No Solution!");return 0;}    printf("%d\n",ans);    for(int i=m+1;i<=n;i++)        if(link[i])printf("%d %d\n",link[i],i);}
原创粉丝点击