首页 > 代码库 > 匈牙利
匈牙利
POJ 3041 最小点覆盖
裸匈牙利。
# include <cstdio># include <cstring>const int maxn = 505;int n, k;int c[maxn];bool g[maxn][maxn];bool vis[maxn];int mark[maxn];bool find(int u) { for (int v = 1; v <= n; ++v) if(g[u][v]){ if (vis[v]) continue; vis[v] = true; if (mark[v]==-1 || find(mark[v])) { mark[v] = u; return true; } } return false;}int main(){ while (scanf("%d%d", &n, &k) != EOF) { memset(c, 0, sizeof(c[0])*(n+1)); for (int i = 1; i <= n; ++i) memset(g[i], false, sizeof(g[i][0])*(n+1)); for (int i = 0, x, y; i < k; ++i) { scanf("%d%d", &x, &y); g[x][y] = true; } int ans = 0; memset(mark, -1, sizeof(mark[0])*(n+1)); for (int i = 1; i <= n; ++i) { memset(vis, false, sizeof(vis[0])*(n+1)); if (find(i)) ++ans; } printf("%d\n", ans); } return 0;}
匈牙利
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。