#include <stdio.h>
#include <string.h>
#define M 310
#define inf 0x3f3f3f3f int n,nx,ny;
int link[M],lx[M],ly[M],slack[M]; //lx,ly为顶标,nx,ny分别为x点集y点集的个数
int visx[M],visy[M],w[M][M]; int DFS(int x)
{
visx[x] = 1;
for (int y = 1;y <= ny;y ++)
{
if (visy[y])
continue;
int t = lx[x] + ly[y] - w[x][y];
if (t == 0) //
{
visy[y] = 1;
if (link[y] == -1||DFS(link[y]))
{
link[y] = x;
return 1;
}
}
else if (slack[y] > t) //不在相等子图中slack 取最小的
slack[y] = t;
}
return 0;
}
int KM()
{
int i,j;
memset (link,-1,sizeof(link));
memset (ly,0,sizeof(ly));
for (i = 1;i <= nx;i ++) //lx初始化为与它关联边中最大的
for (j = 1,lx[i] = -inf;j <= ny;j ++)
if (w[i][j] > lx[i])
lx[i] = w[i][j]; for (int x = 1;x <= nx;x ++)
{
for (i = 1;i <= ny;i ++)
slack[i] = inf;
while (1)
{
memset (visx,0,sizeof(visx));
memset (visy,0,sizeof(visy));
if (DFS(x)) //若成功(找到了增广轨),则该点增广完毕。进入下一个点的增广
break; //若失败(没有找到增广轨),则须要改变一些点的标号,使得图中可行边的数量添加。
//方法为:将全部在增广轨中(就是在增广过程中遍历到)的X方点的标号全部减去一个常数d,
//全部在增广轨中的Y方点的标号全部加上一个常数d
int d = inf;
for (i = 1;i <= ny;i ++)
if (!visy[i]&&d > slack[i])
d = slack[i];
for (i = 1;i <= nx;i ++)
if (visx[i])
lx[i] -= d;
for (i = 1;i <= ny;i ++) //改动顶标后,要把全部不在交错树中的Y顶点的slack值都减去d
if (visy[i])
ly[i] += d;
else
slack[i] -= d;
}
}
int res = 0;
for (i = 1;i <= ny;i ++)
if (link[i] > -1)
res += w[link[i]][i];
return res;
}
int main ()
{
int i,j;
while (scanf ("%d",&n)!=EOF)
{
nx = ny = n;
// memset (w,0,sizeof(w));
for (i = 1;i <= n;i ++)
for (j = 1;j <= n;j ++)
scanf ("%d",&w[i][j]);
int ans = KM();
printf ("%d\n",ans);
}
return 0;
}

最新文章

  1. XAMARIN ANDROID 二维码扫描示例
  2. 未能加载文件或程序集“Microsoft.SQLServer.DTSRuntimeWrap”或它的某一个依赖项。试图加载格式不正确的程序。
  3. windows 下 node.js 和 express 的安装
  4. Query Designer中的特征限制(Characteristic Restrictions)、缺省值(Default Values)、自由特性(Free Characteristics)
  5. 【贪心+一点小思路】Zoj - 3829 Known Notation
  6. Btrace
  7. struts2 MessageStoreInterceptor 拦截器的使用
  8. 关于 &lt;video&gt; 的兼容性测试
  9. C 汇编代码 函数调用指令和栈平衡
  10. 关于.net后台的异步刷新的问题
  11. (转!)利用Keras实现图像分类与颜色分类
  12. Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
  13. WPF没落了吗?
  14. WebAPI返回时间数据不带T
  15. PLSQL_SQL Loader的概念和用法(概念)
  16. Visual Studio Code (vscode)编译C++
  17. iOS设计模式(02):单例模式
  18. 《Crafting Rails 4 Applications》的笔记-第28页
  19. IEnumerable Except
  20. 又续CSS3

热门文章

  1. redis学习(五)事务
  2. docke存储
  3. 最近关于css样式重构的一点心得体会
  4. Java-01背包问题-动态规划-递归和非递归实现
  5. Bzoj1195 [HNOI2006]最短母串 [状态压缩]
  6. WIN8.1侧边栏文件夹删除
  7. echarts中关于merge的代码
  8. 介绍一款可以滚动加载的插件droploader
  9. 基于c语言中调试工具的用法汇总(不包含gdb)【转】
  10. linux内核情景分析之强制性调度