HDU2225奔小康赚大钱(KM匹配模板题)
来源:互联网 发布:金穗开票软件 编辑:程序博客网 时间:2024/06/06 09:06
题意:略。
入门KM的模板题目,学习链接
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<set>#include<map>#include<string>#include<cstring>#include<stack>#include<queue>#include<vector>#include<cstdlib>#define lson (rt<<1),L,M#define rson (rt<<1|1),M+1,R#define M ((L+R)>>1)#define cl(a,b) memset(a,b,sizeof(a));#define LL long long#define P pair<int,int>#define X first#define Y second#define pb push_back#define fread(zcc) freopen(zcc,"r",stdin)#define fwrite(zcc) freopen(zcc,"w",stdout)using namespace std;const int maxn=305;const int inf=999999;/* KM算法 * 复杂度O(nx*nx*ny) * 求最大权匹配 * 若求最小权匹配,可将权值取相反数,结果取相反数 * 点的编号可以从0开始,记得修改对应的循环起止 */int w[maxn][maxn];int linker[maxn],lx[maxn],ly[maxn],slack[maxn];bool visx[maxn],visy[maxn];int nx,ny;bool dfs(int x){ visx[x]=true; for(int y=1;y<=ny;y++){ if(visy[y])continue; int tmp=lx[x]+ly[y]-w[x][y]; if(tmp==0){ visy[y]=true; if(linker[y]==-1||dfs(linker[y])){ linker[y]=x; return true; } }else if(slack[y]>tmp){ slack[y]=tmp; } } return false;}int km(){ cl(linker,-1); cl(ly,0); for(int i=1;i<=nx;i++){ lx[i]=-inf; for(int j=1;j<=ny;j++)if(w[i][j]>lx[i]){ lx[i]=w[i][j]; } } for(int x=1;x<=nx;x++){ for(int i=1;i<=ny;i++){ slack[i]=inf; } while(true){ cl(visx,false); cl(visy,false); if(dfs(x))break; int d=inf; for(int i=1;i<=ny;i++)if(!visy[i]&&d>slack[i]){ d=slack[i]; } for(int i=1;i<=nx;i++)if(visx[i]){ lx[i]-=d; } for(int i=1;i<=ny;i++)if(visy[i])ly[i]+=d; else slack[i]-=d; } } int ans=0; for(int i=1;i<=ny;i++)if(linker[i]!=-1){ ans+=w[linker[i]][i]; } return ans;}int main(){ int n; while(~scanf("%d",&n)){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d",&w[i][j]); } } nx=ny=n; printf("%d\n",km()); } return 0;}
0 0
- HDU2225奔小康赚大钱(KM匹配模板题)
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
- HDU 2255 奔小康赚大钱(KM算法模板题)
- hdu2255 奔小康赚大钱,二分图最优匹配km模板
- HDOJ 题目2255奔小康赚大钱(二分图,km匹配,模板)
- HDU 2255 奔小康赚大钱(KM完美匹配)
- hdu 2255 奔小康赚大钱(KM完美匹配)
- 【KM匹配】 HDOJ 2255 奔小康赚大钱
- hdu 2255 奔小康赚大钱【KM模板题】
- BOJ 6399 奔小康赚大钱 //二分图KM模板题
- hdu 2255 奔小康赚大钱 KM算法 模板题
- hdoj 2255 奔小康赚大钱 【KM算法模板题】
- HDU 2255 奔小康赚大钱 KM模板题
- hdu 2255 - 奔小康赚大钱 ( km模板)
- HDU 2255 奔小康赚大钱 (KM算法 模板)
- hdoj--2255--奔小康赚大钱(KM算法模板)
- HDU 2255 奔小康赚大钱(KM模板)
- HDU 2255 奔小康赚大钱 KM模板
- 实训第一周java小练习
- 在思想上改变,在行动上升华
- C#自学笔记
- 完美数字
- nginx的虚拟主机功能(nginx多站点,绑定多个域名)-----nginx的学习之路
- HDU2225奔小康赚大钱(KM匹配模板题)
- 引用和指针的区别
- 别人的确为了别人——价值观
- kali下安装vmtools
- 装饰者模式
- struts2之Action名称的搜索顺序
- 自定义ViewGroup实现标签云效果。
- 大气实用WordPress主题推荐【wait主题】
- PAT 1072. Gas Station (30)