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) 编辑 收藏 举报