HDU 2255 奔小康赚大钱(最佳二分图匹配)
来源:互联网 发布:软件服务商合作模式 编辑:程序博客网 时间:2024/04/28 10:56
#include<iostream>using namespace std;const int maxn=300+5;int w[maxn][maxn],n;int lx[maxn],ly[maxn];int Left[maxn];bool s[maxn],t[maxn];bool match(int i){ s[i]=true; for(int j=1;j<=n;j++) if(lx[i]+ly[j]==w[i][j]&&!t[j]){ t[j]=true; if(!Left[j]||match(Left[j])){ Left[j]=i; return true; } } return false;}void update(){ int a=(1<<30); for(int i=1;i<=n;i++) if(s[i]) for(int j=1;j<=n;j++) if(!t[j]) a=min(a,lx[i]+ly[j]-w[i][j]); for(int i=1;i<=n;i++){ if(s[i]) lx[i]-=a; if(t[i]) ly[i]+=a; }}void KM(){ for(int i=1;i<=n;i++){ Left[i]=lx[i]=ly[i]=0; for(int j=1;j<=n;j++) lx[i]=max(lx[i],w[i][j]); } for(int i=1;i<=n;i++){ for(;;) { for(int j=1;j<=n;j++) s[j]=t[j]=0; if(match(i)) break;else update(); } }}int main(){ while(~scanf("%d",&n)) { 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++) ans+=w[Left[i]][i]; printf("%d\n",ans); } return 0;}
0 0
- HDU 2255 奔小康赚大钱(最佳二分图匹配)
- hdu 2255 奔小康赚大钱 (KM算法 二分图最佳完美匹配 模板)
- HDU-#2255 奔小康赚大钱(二分图最佳完美匹配+KM)
- HDU 2255 奔小康赚大钱(二分图最优匹配)
- hdu 2255 奔小康赚大钱(二分图的最优匹配)
- HDU2255 奔小康赚大钱【二分图最佳匹配】
- HDU2255奔小康赚大钱 二分图最佳匹配KM
- hdu 2255 奔小康赚大钱(最佳匹配)
- HDU-2255奔小康赚大钱(二分图带权匹配)
- HDU 2255 奔小康赚大钱(二分图最优匹配:模板题)
- [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)
- hdu 2255 奔小康赚大钱 (二分图最优匹配,KM算法)
- HDU 2255 奔小康赚大钱(二分图最优匹配:模板题)
- HDU 2255 奔小康赚大钱 (二分图最大权匹配)
- HDU 2255 奔小康赚大钱 (KM算法+二分图最大权匹配)
- HDU 2255 奔小康赚大钱 (二分图:KM算法)
- 二分图最佳匹配 KM算法 Hdu2255奔小康赚大钱 + Poj 3565 Ants
- HDU2255 奔小康赚大钱 【二分图最佳匹配·KM算法】
- pcl 1.8 + VS 2010 在win7 x64下的配置
- require.js 入门学习
- 【腾讯android的SDK】mTencent总是实例化失败,各位大神菜鸟求教!!!
- python中django使用MySQL时出问题如何解决
- 学生成绩管理系统(摘自C语言程序设计与实践)
- HDU 2255 奔小康赚大钱(最佳二分图匹配)
- 【LeetCode】34. Search for a Range
- 使用gson解析json后怎么把数组放到listview中
- 安卓TextView换行问题
- 数据结构(十四) 线索二叉树讲解(不带头节点中序加线索) 以及实现的完整代码
- 关于cordova打包apk右滑返回事件如何禁止
- [数据结构]java实现的简单链表的 头/尾插法
- 视频监控相关协议
- Python