zoukankan
html css js c++ java
带权的二分匹配
#include <queue> #include <algorithm> /*********************************************************/ //这些都是KM模板 const int N = 305;//二分图中每一个子图的点的最大数 const int INF = 1<<28;//正无穷 bool xckd[N], yckd[N];//在一次DFS中,Xi与Yi是否在交错树上 int n;//点的个案 int edge[N][N];//二维权值信息用矩阵来存储 int xmate[N], ymate[N];//保存匹配结果 int lx[N], ly[N];//Xi与Yi和标号,即解说中的A[]和B[] int slack[N];//松弛量 int prev[N];//? queue<int> Q; bool bfs();//寻找增广路径 void agument(int); int KMMatch();//KM算法 /*********************************************************/ bool bfs() { while(!Q.empty()) { int p = Q.front(), u = p>>1; Q.pop(); if(p&1) { if(ymate[u] == -1) { agument(u); return true; } else { xckd[ymate[u]] = true; Q.push(ymate[u]<<1); } } else { for(int i = 0; i < n; i++) { if(yckd[i])continue; else if(lx[u] + ly[i] != edge[u][i]) { int ex = lx[u] + ly[i] - edge[u][i]; if(slack[i] > ex) { slack[i] = ex; prev[i] = u; } } else { yckd[i] = true; prev[i] = u; Q.push((i<<1)|1); } } } } return false; } void agument(int u) { while(u != -1) { int pv = xmate[prev[u]]; ymate[u] = prev[u]; xmate[prev[u]] = u; u = pv; } } int KMMatch() { int i, j, mn; memset(ly, 0, sizeof(ly)); for(i = 0; i < n; i++) { lx[i] = -INF; for(j = 0; j < n; j++) { lx[i] = lx[i]>edge[i][j]?lx[i]:edge[i][j]; } } memset(xmate, -1, sizeof(xmate)); memset(ymate, -1, sizeof(ymate)); bool agu = true; for(mn = 0; mn < n; mn++) { if(agu) { memset(xckd, 0, sizeof(xckd)); memset(yckd, 0, sizeof(yckd)); for(i = 0; i < n; i++) slack[i] = INF; while(!Q.empty()) Q.pop(); xckd[mn] = true; Q.push(mn<<1); } if(bfs()) { agu = true; continue; } int ex = INF; mn--; agu = false; for(i = 0; i < n; i++) if(!yckd[i]) ex = ex<slack[i]?ex:slack[i]; for(i = 0; i < n; i++) { if(xckd[i]) lx[i] -= ex; if(yckd[i]) ly[i] += ex; slack[i] -= ex; } for(i = 0; i < n; i++) if(!yckd[i] && slack[i] == 0) { yckd[i] = true; Q.push((i<<1)|1); } } int cost = 0; for(i = 0; i < n; i++) cost += edge[i][xmate[i]]; return cost; }
查看全文
相关阅读:
saiku导出excel单元格格式与中文列宽自动适应
saiku中过滤窗口优化及隐藏异常报错
saiku之固定维度(必选维度)
saiku中多cube排序问题
saiku中默认级别all的国际化
Nginx基本配置、性能优化指南
Nginx安装部署
64位虚拟机中安装CentOS_6.7
memcached全面剖析–5. memcached的应用和兼容程序
memcached全面剖析–4. memcached的分布式算法
原文地址:https://www.cnblogs.com/windmissing/p/2559824.html
最新文章
java Web JSTL介绍及基本应用
java Web EL表达式详解
java Web jsp嵌入代码的三种方式
java Web 请求servlet绘制验证码简单例子
java Web中页面跳转方式之重定向和请求转发的区别
Codeforces 513G1 513G2 Inversions problem [概率dp]
codeforces Rockethon 2015 C Second price auction [想法]
Valentine's Day Round hdu 5176 The Experience of Love [好题 带权并查集 unsigned long long]
POJ 2185 Milking Grid [二维KMP next数组]
Codeforces Round #291 (Div. 2) C. Watto and Mechanism [字典树]
热门文章
Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army [线段树+线性扫一遍]
Codeforces 271D
hdu1671 Phone List [字典树 hash]
HDU4768:Flyer [ 二分的奇妙应用 好题 ]
POJ Blue Jeans [枚举+KMP]
Redis数据结构及相应的命令
Spring学习笔记1—依赖注入(构造器注入、set注入和注解注入)
Saiku如何固定查询结果table的表头和首列
Saiku图表导出时中文显示问题的解决方法
Saiku对Measure(指标)查询结果进行计算后显示的方法
Copyright © 2011-2022 走看看