poj3041 最小点覆盖即最大匹配(匈牙利算法)(模板)

来源:互联网 发布:sql server 实训报告 编辑:程序博客网 时间:2024/05/16 12:05
<pre>#include <iostream>#include <cmath>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <utility>#define inf (1<<28)#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid ((l+r)>>1)using namespace std;#define MAXN 505bool map[MAXN][MAXN], vis[MAXN];int match[MAXN];int n, k;bool dfs(int u){    for(int i=1;i<=n;i++)    {        if(!vis[i]&&map[u][i]){            vis[i]=true;            if(match[i]==-1||dfs(match[i])){//没被选或者这个点虽然被选了,但是可以增广                match[i]=u;                return true;            }        }    }    return false;}int Maxmatch(){    int ret=0;    memset(match,-1,sizeof(match));    for(int i=1;i<=n;i++)    {        memset(vis,false,sizeof(vis));        if(dfs(i))ret++;    }    return ret;}int main(){    while( scanf( "%d%d", &n, &k) == 2)    {        int x, y;        memset( map, false, sizeof map);        for( int i = 1; i <= k; i ++)        {            scanf( "%d%d", &x, &y);            map[x][y] = true;        }        int ans = Maxmatch();        printf( "%d\n", ans);    }    return 0;}

1 0
原创粉丝点击