二分图最大匹配(匈牙利KM)

来源:互联网 发布:挖贝软件下载 编辑:程序博客网 时间:2024/06/14 08:08


首先引用一个很好的博客——二分图大讲堂hh

11

这是poj

#include <iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=500+5;int edge[maxn][maxn];int cx[maxn];int n,m;int vist[maxn];int num(int u){    for(int i=1;i<=n;i++)    {        if(edge[i][u]&&!vist[i])        {            vist[i]=1;            if(cx[i]==-1||num(cx[i]))            {                cx[i]=u;                return 1;            }        }    }    return 0;}int maxmatch(){    int res=0;    memset(cx,0xff,sizeof(cx));    for(int i=1;i<=n;i++)    {        memset(vist,0,sizeof(vist));        res+=num(i);    }    return res;}int main(){  cin>>n>>m;  int x,y;  memset(edge,0,sizeof(edge));  while(m--)  {      cin>>x>>y;      edge[x][y]=1;  }  int ans=maxmatch();  cout<<ans<<endl;    return 0;}