LouZhang

导航

hdu_2063,二分图最大匹配的学习

http://acm.hdu.edu.cn/showproblem.php?pid=2063

也拿这个当模板吧。。。

#include<cstdio>
#include<cstring>

int k, m, n;
bool g[510][510];
int visit[510], link[510];
bool dfs(int u){
    for(int i = 1; i <= n; i ++){
        if(g[u][i] && !visit[i]){
            visit[i] = 1;
            if(link[i] == -1 || dfs(link[i])){
                link[i] = u;
                return true;
            }
        }
    }
    return false;
}
int max_match(){
    memset(link, -1, sizeof link);
    int ans = 0;
    for(int i = 1; i <= m; i ++){
        memset(visit, 0, sizeof visit);
        if(dfs(i))
          ans ++;
    }
    return ans;
}
int main(){
    while(scanf("%d", &k), k){
        scanf("%d%d", &m, &n);
        memset(g, 0, sizeof g);
        while(k --){
            int u, v;
            scanf("%d%d", &u, &v);
            g[u][v] = true;
        }
        printf("%d\n", max_match());
    }
    return 0;
}

就是不断的DFS。。

posted on 2012-08-12 16:34  louzhang_swk  阅读(158)  评论(0编辑  收藏  举报