poj3041-二分图最大匹配

来源:互联网 发布:象棋名手软件 编辑:程序博客网 时间:2024/05/17 02:19

连接有关二分图分析

题目:连接就知道了

行和列分别看成两个集合,子弹看成边就行了,一个典型的模板题。

代码如下:

#include<stdio.h>#include<string.h>bool used[505];int map[505][505];int match[10005];int n;bool find(int i){for(int j=1;j<=n;j++){if(map[i][j]&&!used[j]){used[j]=true;if(match[j]==0||find(match[j])){match[j]=i;return true;}}}return false;}void hungary(int n){   int sum=0;memset(match,0,sizeof(match)); for(int i=1;i<=n;i++){memset(used,false,sizeof(used));if(find(i))sum++;}   printf("%d\n",sum);}int main(){   int m,x,y;while(scanf("%d%d",&n,&m)!=EOF){memset(map,0,sizeof(map));for(int i=1;i<=m;i++){    scanf("%d%d",&x,&y);    map[x][y]=1;} hungary(n);}return 0;}    




原创粉丝点击