#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;

}

最新文章

  1. iOS--xuer(registration)
  2. 到入百度LSS framework Reason: image not found
  3. springMVC配置步骤
  4. iOS 直播(一)
  5. map中的erase成员函数用法
  6. Target host is not specified错误
  7. for-in语句
  8. javacript参数传递表单验证
  9. ELK的高级篇(测试记录各种日志)
  10. [luogu3391][文艺平衡树]
  11. P3258 [JLOI2014]松鼠的新家
  12. BF算法和KMP算法 python实现
  13. vuejs怎么在服务器部署?(知乎)
  14. SpringMVC之接收请求参数和页面传参
  15. (15)javaScript入门
  16. layer.js关闭子窗口及刷新父窗口
  17. Linux学习15-CentOS安装mysql5.6环境
  18. 阿里云liunx-ubuntu安装中文
  19. vscode环境配置
  20. OC 指向指针的指针

热门文章

  1. 51NOD 1088 最长回文子串&amp;1089 最长回文子串 V2(Manacher算法)
  2. 【Java】3到5年开发常见的Java面试题
  3. IBatis.NET 的配置
  4. [BZOJ1331]魔板
  5. 239 Sliding Window Maximum 滑动窗口最大值
  6. SCRIPT70: 没有权限
  7. MyElipse如何添加Emmet插件
  8. ES6十大常用特性
  9. web安全测试--XSS(跨站脚本)与CSRF
  10. 一个完整的网站记录(springmvc hibernate juery bootstrap)