//hdu1853
#include<stdio.h>
#include<string.h>
#define INF 99999999
int map[][],pr[],pl[],visr[],visl[],slack[],match[];
int n,m;
int dfs(int u)
{
int i,j,val; visl[u]=;
for(i=;i<=n;i++)
{
if(!visr[i])
{
val=pr[i]+pl[u]-map[u][i];
if(val==)
{
visr[i]=;
if(match[i]==-||dfs(match[i]))
{
match[i]=u;
return ;
}
}
if(val>&&slack[i]>val)
slack[i]=val;
}
}
return ;
}
void km()
{
int i,j,res=,d;
for(i=;i<=n;i++)
pl[i]=INF;
memset(pr,,sizeof(pr));
memset(match,-,sizeof(match));
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
slack[j]=INF;
while()
{
memset(visr,,sizeof(visr));
memset(visl,,sizeof(visl));
if(dfs(i))
break;
d=INF;
for(j=;j<=n;j++)
{
if(!visr[j]&&d>slack[j])
d=slack[j];
}
for(j=;j<=n;j++)
{
if(visr[j])
pr[j]+=d;
if(visl[j])
pl[j]-=d;
}
}
}
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=;i<=n;i++)
for(j=;j<=n;j++)
map[i][j]=-INF; for(i=;i<m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(map[x][y]<-z)
{
map[x][y]=-z;
}
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",map[i][j]);
printf("\n");
}*/
km();
int flag=;
int res=;
for(i=;i<=n;i++)
{
if(map[match[i]][i]==-INF)
{flag=;break;}
else res+=map[match[i]][i];
}
if(!flag)printf("-1\n");
else
printf("%d\n",-res);
}
}

hdu1853 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. 【温故而知新-Javascript】时间效果(显示当前时间、显示当前日期、显示页面停留时间、倒计时)

    1.显示当前时间 <body onload="showtime()"> <div>当前时间: <span id="clock"&g ...

  2. 最长回文子串Manacher算法模板

    Manacher算法能够在O(N)的时间复杂度内得到一个字符串以任意位置为中心的回文子串.其算法的基本原理就是利用已知回文串的左半部分来推导右半部分. 首先,在字符串s中,用rad[i]表示第i个字符 ...

  3. Highlighting System

    Highlighting System 法线贴图漫反射着色器 Unity论坛:http://forum.unity3d.com/threads/143043-Highlighting-System-R ...

  4. Flash Builder快捷键

    代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索对话框:Ctrl+H快速Outline:Ctrl ...

  5. kvm虚拟机日常管理和配置操作命令梳理

    KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理.1)查看KVM虚拟机配置文件及运行状态KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/autostart目录是配置kvm ...

  6. work_queue 函数调用栈

    init_workqueues --->  create_worker --> kthread_create_on_node

  7. 11Mybatis_mybatis开发Dao的方法

    在介绍开发Dao的方法之前先介绍下SqlSession. 1.先介绍一下SqlSessionFactoryBuilder:通过SqlSessionFactoryBuilder创建会话工厂SqlSess ...

  8. 【转】【Asp.Net】了解使用 ASP.NET AJAX 进行局部页面更新

    简介Microsoft的 ASP.NET 技术提供了一个面向对象.事件驱动的编程模型,并将其与已编译代码的优势结合起来.但其服务器端的处理模型仍存在技术本身所固有的几点不足: 进行页面更新需要往返服务 ...

  9. [tools]QuickPing

    一款神器 quickping 能够很快的探测出该网断分出去哪些地址.   在线的会显示绿色 在线的+有主机名的显示为亮绿色

  10. C语言 详解多级指针与指针类型的关系

    //V推论①:指针变量的步长只与‘指针变量的值’的类型有关(指针的值的类型 == 指针指向数据的类型) //指针类型跟指针的值有关,指针是占据4个字节大小的内存空间,但是指针的类型却是各不相同的 // ...