自用二分图匹配模板
2017-11-05 23:33
169 查看
关于二分图匹配的讲解请看我之前的那篇博客。
#include <iostream> #include <cstdio> #include <cstring> #define maxn 1005 using namespace std; struct Edge{ int from,to; }; inline int read(){ int num = 0; char c; bool flag = false; while ((c = getchar()) == ' ' || c == '\n' || c == '\r'); if (c == '-') flag = true; else num = c - '0'; while (isdigit(c = getchar())) num = num * 10 + c - '0'; return (flag ? -1 : 1) * num; } Edge edge[maxn*maxn]; int head[maxn*2]; int tot = 0; void add_edge(int from,int to){ edge[++tot].from = head[from]; edge[tot].to = to; head[from] = tot; } int n,m,e; bool vis[maxn]; int match[maxn]; bool dfs_xyl(int x){ for (int i=head[x];i;i=edge[i].from){ int v = edge[i].to; if (!vis[v]){ vis[v] = true; if (!match[v]||dfs_xyl(match[v])){ match[v] = x; return true; } } } return false; } int main(){ n = read();m = read();e = read(); for (int i=1;i<=e;i++){ int u,v; u = read();v = read(); if (u > n || v > m) continue; add_edge(u,v); } int ans = 0; for (int i=1;i<=n;++i){ memset(vis,false,sizeof(vis)); if(dfs_xyl(i)) ans++; } cout << ans << endl; return 0; }
相关文章推荐
- 【二分图匹配】HDU2063-过山车【模板题】
- elasticsearch动态模板(自用)使用需测试
- hdu 4185 Oil Skimming(二分图匹配 经典建图+匈牙利模板)
- 【自用模板】数位dp
- 洛谷P3386 【模板】二分图匹配
- [自用]门户网站模板-招标公告
- 【自用】关于欧拉函数以及逆元的一些模板
- HDOJ 题目1083Courses(二分图匹配,匈牙利算法模板)
- (自用)字典树模板
- 【自用模板】贪心
- 【模板】二分图匹配
- 二分图匹配模板
- [自用]门户网站模板-招标公告
- 【模板】匈牙利算法 二分图匹配 (模版题:洛谷P3386)
- 二分图匹配的两个主要算法 模板
- 排序模板(自用)
- 二分图匹配——Hopcroft-Carp算法模板
- 二分图匹配算法之匈牙利算法模板 hdoj1083 nyoj月老的难题
- 自用lca模板
- 洛谷 3386 二分图匹配模板 匈牙利算法