KM算法O(n^3)模板 hdu2255
来源:互联网 发布:怎么把mac文件拷到硬盘 编辑:程序博客网 时间:2024/05/20 13:36
#include<iostream>using namespace std;const int maxn=300+5;const int inf=(1<<30);int w[maxn][maxn];int lx[maxn],ly[maxn];int s[maxn],t[maxn];int slack[maxn];int match[maxn];int n;bool find(int i){ s[i]=true; for(int j=1;j<=n;j++) { if(t[j]) continue; int tmp=lx[i]+ly[j]-w[i][j]; if(tmp==0) { t[j]=true; if(match[j]==-1||find(match[j])) { match[j]=i; return true; } } else if(slack[j]>tmp) slack[j]=tmp; } return false;}void update(){ int d=inf; for(int i=1;i<=n;i++) if(!t[i]&&d>slack[i]) d=slack[i]; for(int i=1;i<=n;i++) if(s[i]) lx[i]-=d; for(int i=1;i<=n;i++){ if(t[i]) ly[i]+=d; else slack[i]-=d; }}void KM(){ memset(match,-1,sizeof(match)); memset(ly,0,sizeof(ly)); for(int i=1;i<=n;i++) { lx[i]=-inf; for(int j=1;j<=n;j++) if(w[i][j]>lx[i]) lx[i]=w[i][j]; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) slack[j]=inf; for(;;) { memset(s,0,sizeof(s)); memset(t,0,sizeof(t)); if(find(i)) break;else update(); } }}int main(){ while(~scanf("%d",&n)) { memset(w,0,sizeof(w)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&w[i][j]); KM(); int ans=0; for(int i=1;i<=n;i++) if(match[i]!=-1) ans+=w[match[i]][i]; printf("%d\n",ans); } return 0;}
0 0
- KM算法O(n^3)模板 hdu2255
- KM(N^3)模板(HDU2255)
- KM(N^3)模板(HDU2255)
- KM算法(O(n^4)) HDU2255
- KM算法模板 hdu2255
- hdu2255(KM算法模板)
- km算法模板 hdu2255
- HDU2255 KM优化(n^3)模板
- HDU2255 KM优化(n^3)模板
- KM算法模板(hdu2255)
- hdu2255 KM算法入门 KM算法模板
- hdu2255--KM算法
- KM算法(O(n^3)) HDU 2255
- hdu2255+poj3565(km模板题)
- KM(n^3)模板
- hdu2255二分最优匹配KM标准模板
- HDU2255 KM完全匹配模板题收藏
- 小白学习KM算法详细总结--附上模板题hdu2255
- string类字符串方法
- 微服务 Rpc和Rest协议
- ajax综合案例之瀑布流
- OpenCV 学习笔记 ----图像的基本操作(二)
- spark 读取json文件并分析
- KM算法O(n^3)模板 hdu2255
- 使用socket方式连接Nginx优化php-fpm性能
- [editor]Source Insight编辑器的快捷键设置暨相关宏语言(Macro Language)的学习一
- 基于MQTT协议的 org.eclipse.paho.client.mqttv3 源码学习(二)
- CGI程序中文乱码问题
- 低通滤波器实现过程解析
- 驾考助手,ios学习
- 源码-Oracle数据库管理-第十六章-异常处理机制-Part 3(处理异常)
- Hibernate中createCriteria即QBC查询的详细用法