二分图匹配

来源:互联网 发布:耐脏打扮知乎 编辑:程序博客网 时间:2024/06/07 02:08

这是一个关于原谅与被原谅的故事

#include <cstdio>#include <iostream>#include <cstring>using namespace std;bool f[999]; //访问标记数组int match[999];//配对数组int n,m;int map[999][999];int dfs(int u){    for(int i=1;i<=n;i++)     if(f[i]==0&&map[u][i])//有联系并且这个点没有访问      {        f[i]=1;        if(!match[i]||dfs(match[i]))//当连接点没有匹配到人,或者i的配对人可以找到新的配对人,就把u,i配对        {            match[u]=i;            match[i]=u;            return 1;//配对成功        }      }}int main(){    scanf("%d%d",&n,&m);    for(int i=1;i<=m;i++)     {        int x,y;        scanf("%d%d",&x,&y);         map[x][y]=1;         map[y][x]=1;     }    int sum=0;     for(int i=1;i<=n;i++)     {        memset(f,0,sizeof(f));//清空标记数组        if(dfs(i)) sum++;//这个人可以匹配,匹配对+1     }     printf("%d",sum);     return 0;} 
1 0
原创粉丝点击