【SPOJ-MATCHING】Fast Maximum Matching【二分图匹配】
来源:互联网 发布:python入门经典书籍 编辑:程序博客网 时间:2024/06/08 09:03
dinic TLE,hungary TLE...
然后听说了比hungary不知道高到哪里去的HK算法。
模板...
#include <cstdio>#include <algorithm>using namespace std;typedef long long LL;const int maxn = 50005, maxm = 150005, maxq = 200000, inf = 0x3f3f3f3f;int n, m, head[maxn], cnt, xlink[maxn], ylink[maxn], dx[maxn], dy[maxn], q[maxq];bool vis[maxn];struct _edge {int v, next;} g[maxm];inline int iread() {int f = 1, x = 0; char ch = getchar();for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';return f * x;}inline void add(int u, int v) {g[cnt] = (_edge) {v, head[u]};head[u] = cnt++;}int dis;bool bfs() {int h = 0, t = 0; dis = inf;for(int i = 0; i < maxn; i++) dx[i] = dy[i] = -1;for(int i = 1; i <= n; i++) if(!~xlink[i]) dx[q[t++] = i] = 0;while(h != t) {int u = q[h++];if(dx[u] > dis) break;for(int i = head[u]; ~i; i = g[i].next) if(!~dy[g[i].v]) {dy[g[i].v] = dx[u] + 1;if(!~ylink[g[i].v]) dis = dy[g[i].v];else dx[q[t++] = ylink[g[i].v]] = dy[g[i].v] + 1;}}return dis != inf;}bool find(int x) {for(int i = head[x]; ~i; i = g[i].next) if(!vis[g[i].v] && dy[g[i].v] == dx[x] + 1) {vis[g[i].v] = 1;if(~ylink[g[i].v] && dy[g[i].v] == dis) continue;if(!~ylink[g[i].v] || find(ylink[g[i].v])) {xlink[x] = g[i].v; ylink[g[i].v] = x;return 1;}}return 0;}int main() {n = iread(); m = iread();for(int i = 0; i < maxn; i++) head[i] = xlink[i] = ylink[i] = -1;int k = iread();while(k--) {int x = iread(), y = iread();add(x, y);}int ans = 0;while(bfs()) {for(int i = 0; i < maxn; i++) vis[i] = 0;for(int i = 1; i <= n; i++) if(!~xlink[i]) ans += find(i);}printf("%d\n", ans);return 0;}
0 0
- 【SPOJ-MATCHING】Fast Maximum Matching【二分图匹配】
- SPOJ Fast Maximum Matching(二分图最大匹配Hopcroft-Carp)
- SPOJ 4106 Fast Maximum Matching
- SPOJ 4206 Fast Maximum Matching(HK算法)
- Hdu 6073 Matching In Multiplication 二分图完美匹配
- NLP: 中文分词算法--正向最大匹配 Forward Maximum Matching
- 【资料】Maximum Bipartite Matching
- Maximum Bipartite Matching
- Matching
- HDU 6073 Matching In Multiplication (拓扑排序+搜索 求二分图所有完美匹配价值和)
- adblock plus fast filter matching
- 字符串匹配(String Matching)
- DNA matching匹配问题
- Wildcard Matching 通配符匹配
- Swift-匹配-Matching
- Wildcard Matching 通配符匹配
- 模板匹配BLOCK MATCHING
- Wildcard Matching 通配符匹配
- windows上安装redis和phpredis扩展
- Xcode插件优缺点对比(推荐20款插件)
- 【iOS开发】结构体如何存入数组中
- Ext 基础知识之事件机制
- DrawCli代码中双缓冲,裁剪区技术以及坐标变换等技术分析
- 【SPOJ-MATCHING】Fast Maximum Matching【二分图匹配】
- 模块化--RequireJS
- android中对Canvas.drawCircle()方法的理解
- 媒体类型@media
- Dede列表页调用TAG标签的方法
- hrbust 哈理工oj 1993数硬币【dp】【背包】
- MVP模式
- UEFI+GPT引导基础篇(一):什么是GPT,什么是UEFI?
- SAP解决USACO4.2.1网络流问题