题目大意

给出n*n表格,第a[i,j]表示i到j的权值,现在我们要将每个a[i,j]=sum[j]-a[i,j],

求出当前二分图a[][]最小匹配

最小匹配只需将权值取负后,求二分图最大匹配,使用km算法(即之前blog中代码稍微改了一下)

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int lx[200],ly[200],w[200][200],pre[200];
int n,ans,mi;
bool sx[200],sy[200];
bool path(int p){
sx[p]=1;
int i;
for(i=1;i<=n;i++)
if (!sy[i]&&lx[p]+ly[i]==w[p][i]){
sy[i]=1;
if (pre[i]==0||path(pre[i])){
pre[i]=p;
return 1;
}
}
return 0;
}
int main()
{
int i,j,k;
scanf("%d",&n);
for(i=1;i<=n;i++) lx[i]=-10000000;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
scanf("%d",&w[i][j]);
w[n+1][j]+=w[i][j];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
w[i][j]=-(w[n+1][j]-w[i][j]);
if (w[i][j]>lx[i]) lx[i]=w[i][j];
}
for(i=1;i<=n;i++){
memset(sx,0,sizeof(sx));
memset(sy,0,sizeof(sy));
while (!path(i)){
mi=2000000000;
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
if (sx[j]&&!sy[k]){
if (lx[j]+ly[k]-w[j][k]<mi) mi=lx[j]+ly[k]-w[j][k];
}
for(j=1;j<=n;j++) if(sx[j]) lx[j]-=mi;
for(j=1;j<=n;j++) if(sy[j]) ly[j]+=mi;
memset(sx,0,sizeof(sx));
memset(sy,0,sizeof(sy));
}
}
for(i=1;i<=n;i++)
ans+=-(lx[i]+ly[i]);
printf("%d",ans);
return 0;
}

Ural1076(km算法)的更多相关文章

  1. 匈牙利算法与KM算法

    匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...

  2. 【HDU2255】奔小康赚大钱-KM算法

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  3. HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法

    二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...

  4. KM算法及其优化的学习笔记&&bzoj2539: [Ctsc2000]丘比特的烦恼

    感谢  http://www.cnblogs.com/vongang/archive/2012/04/28/2475731.html 这篇blog里提供了3个链接……基本上很明白地把KM算法是啥讲清楚 ...

  5. poj 2195 KM算法

    题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...

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

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

  7. HDU(2255),KM算法,最大权匹配

    题目链接 奔小康赚大钱 Time Limit: 1000/1000MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  8. 二分图 最大权匹配 km算法

    这个算法的本质还是不断的找增广路: KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最 ...

  9. hdu 2255 奔小康赚大钱 KM算法

    看到这么奇葩的题目名我笑了,后来这么一个裸的KM调了2小时我哭了…… 这是个裸的KM算法,也没什么多说的,主要是注意多组数据时,每次都要把各种数组清空啊,赋值啊什么的,反正比较麻烦.至于为什么调了2小 ...

随机推荐

  1. 存储过程——在LINQ中使用(六)

    上述几篇都将了存储与数据库,关联的一些实例,首先感谢各位大神们在前几篇文章中提到的问题,本人还在学习中,这次介绍下在linq中如何应用存储过程: LINQ简介 语言集成查询(LINQ)在对象领域和数据 ...

  2. maven工程的如何进行代码调试

    1.maven项目的父项目右键选择:maven build    注意:       1.选择Browser workspace,让BaseDirectory变成:${***}形式.       2. ...

  3. Mongo:将查询结果转换为自定义类

    1.自定义类 public class MyClass { public string Name { get; set; } public int Corners { get; set; } } 2. ...

  4. 【HDOJ】【1754】I Hate It

    线段树 这是一道线段树的裸题……带单点修改的RMQ 为什么我会想到写这么一道傻逼题呢?是因为这样……

  5. WCF 之 OperationContract

    这里主要说的是同名异常: [ServiceContract] public interface IUserInfo { [OperationContract] string ShowName(stri ...

  6. iOS开发之静态库的制作

    当你需要和别人分享代码,但又不想让别人看到你内部的实现时就需要制作静态库,通常用于第三方SDK 下面就分享一下制作静态库(.a)的过程: 1.打开Xcode,新建workspace 2.随便给work ...

  7. Unity3D脚本中文系列教程(二)

    原地址:http://dong2008hong.blog.163.com/blog/static/469688272014030347910/ Unity3D脚本中文系列教程(一) .根据名称或标签定 ...

  8. SPOJ MULTQ3 7299 Multiples of 3 (区间更新)

    题目连接:http://www.spoj.com/problems/MULTQ3/ #include <iostream> #include <stdio.h> #includ ...

  9. [hackerrank]John and GCD list

    https://www.hackerrank.com/contests/w8/challenges/john-and-gcd-list 简单题,GCD和LCM. #include <vector ...

  10. 【nginx运维基础(3)】Nginx的编译PHP

    Apache默认是把PHP作为本身的一个模块(mod_php)来运行的,而Nginx是以FastCGI方式运行的.所以使用Nginx+PHP就是直接配置为FastCGI模式. 安装PHP 下载地址: ...