正题
题目
有n个中国学生与若干个外国学生,一些中国学生与外国学生之间可以很好的配对,求能配成的最多对数
解题思路
二分图匈牙利算法
代码
#include<cstdio>
#include<cstring>
using namespace std;
struct line{int x,y,next;
}a[10001];
int link[10001],n,m,ls[10001],xx,yy,s;
bool cover[10001];
bool find(int x)//寻找增广链
{int p=0;for (int q=ls[x];q;q=a[q].next)//邻接表枚举{if (!cover[a[q].y]){p=link[a[q].y];link[a[q].y]=x;//改变cover[a[q].y]=true;//标记if (!p || find(p)) return true;link[a[q].y]=p;//回退}}return false;
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d%d",&yy,&xx);a[i].x=xx;a[i].y=yy;a[i].next=ls[xx];ls[xx]=i;}for (int i=1;i<=n;i++){memset(cover,false,sizeof(cover));if (find(i)) s++;}if (!s) printf("NO SOLUTION");else printf("%d",s);
}