hdu 2255KM算法模板

原创 2013年12月03日 00:04:58
#include<stdio.h>
#include<string.h>
#define N  400
#define inf 0x7fffffff
int Max(int a,int b ) {
return a>b?a:b;
}
int Min(int a,int b) {
return a>b?b:a;
}
int map[N][N],lx[N],ly[N],s[N],t[N],link[N],n;
int find(int u) {
int i;
s[u]=1;
for(i=1;i<=n;i++)  
if(!t[i]&&lx[u]+ly[i]==map[u][i]) {
t[i]=1;
if(!link[i]||find(link[i])) {
link[i]=u;
return 1;
}
}
return 0;
}
int KM() {
int i,j,sum=0,d,k;
memset(lx,0,sizeof(lx));
memset(ly,0,sizeof(ly));
memset(link,0,sizeof(link));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
lx[i]=Max(lx[i],map[i][j]);
for(i=1;i<=n;i++) {
d=inf;
while(1) {
memset(s,0,sizeof(s));
memset(t,0,sizeof(t));
if(find(i))break;
for(j=1;j<=n;j++)
if(s[j]) {
for(k=1;k<=n;k++)
if(!t[k])
d=Min(d,lx[j]+ly[k]-map[j][k]);
}
for(j=1;j<=n;j++) {
if(s[j])lx[j]-=d;
if(t[j])ly[j]+=d;
}
}

}
for(i=1;i<=n;i++)
sum+=map[link[i]][i];
return sum;
}
int main() { 
int i,j;
while(scanf("%d",&n)!=EOF) {
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
printf("%d\n",KM());
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

小白学习KM算法详细总结--附上模板题hdu2255

x小白理解KM算法学习总结,归纳各位大神的总结,结合自己辛苦画的图,详细的模板解说,希望自己以后回头看能一目了然,也对刚接触Km的人有帮助..

HDU 2255 奔小康赚大钱 (KM算法 模板)

A - 奔小康赚大钱 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S...

KM算法模板 hdu2255

/* 二分图最优匹配算法,邻接矩阵形式 复杂度o(m^3) HDU 2255 当前默认权值最大匹配 */ #include #include #include #include #include ...

hdu 2255奔小康赚大钱 KM算法模板

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 一,KM算法:(借助这个题写一下个人对km的理解与km模板) KM算法主要是用来求解图的最优匹配...

hdu 2255 奔小康赚大钱--KM算法模板

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,...

hdu2255+poj3565(km模板题)

hdu2255 奔小康赚大钱

hdoj 2255 奔小康赚大钱 (KM算法 详解+模板)

转自点击打开链接 【KM算法及其具体过程】 (1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j, W)都有lx[i]+ly[j]...

hdu2255 奔小康赚大钱,二分图最优匹配km模板

Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。  这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到...

HDU2255 KM完全匹配模板题收藏

跟着yifan sama继续游走江湖 #include #include #include #include using namespace std; const ...

HDU 2255 带权二分图 KM模板

奔小康赚大钱 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit&#...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)