hdu3488Tour KM算法
//给一个有向图,
//找出若干环,使得这些环覆盖全部点且每一个点仅仅能在一个环中
//问所得的全部环的全部边权值之和的最小值为多少
//对于每一个点仅仅有一个入度和一个出度。那么将每一个点拆成
//入度点和出度点,将全部入度点和全部出度点构成一个完备匹配
//因为是完备匹配,所以每一个点的出度和入度都有一个不是自己的点
//相连,那么将完备匹配的全部点连接起来一定是若干环
//所得完备匹配的最小匹配即为答案
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 210 ;
const int inf = 0x3f3f3f3f ;
int lx[maxn] , ly[maxn] , slack[maxn] ;
int visx[maxn] , visy[maxn] , match[maxn] ;
int map[maxn][maxn] ;
int n , m ;
int find(int x)
{
visx[x] = 1 ;
for(int i = 1;i <= n;i++)
{
if(visy[i])continue ;
int tmp = lx[x] + ly[i] - map[x][i] ;
if(tmp == 0)
{
visy[i] = 1 ;
if(match[i] == -1 || find(match[i]))
{
match[i] = x ;
return true ;
}
}
else slack[i] = min(slack[i] , tmp) ;
}
return false ;
}
int KM()
{
memset(ly , 0 , sizeof(ly)) ;
memset(match , -1 , sizeof(match)) ;
for(int i = 1;i <= n;i++)
{
lx[i] = -inf ;
for(int j = 1;j <= n;j++)
lx[i] = max(lx[i] , map[i][j]) ;
}
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
slack[j] = inf ;
while(1)
{
memset(visx , 0 ,sizeof(visx)) ;
memset(visy , 0 ,sizeof(visy)) ;
if(find(i))break ;
int d = inf ;
for(int j = 1;j <= n;j++)
if(!visy[j])
d = min(d , slack[j]) ;
for(int j = 1;j <= n;j++)
if(visx[j])
lx[j] -= d ;
for(int j = 1;j <= n;j++)
if(visy[j])
ly[j] += d ;
else slack[j] -=d ;
}
}
int ans = 0 ;
for(int i = 1;i <= n;i++)
ans += map[match[i]][i] ;
return ans ;
}
int main()
{
int t ;
scanf("%d" , &t) ;
while(t--)
{
scanf("%d%d" , &n , &m) ;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
map[i][j] = -inf ;
while(m--)
{
int u , v , w ;
scanf("%d%d%d" , &u , &v , &w) ;
if(u != v && -w > map[u][v])
map[u][v] = -w ;
}
int ans = KM() ;
printf("%d\n" , -ans) ;
}
return 0 ;
}
hdu3488Tour KM算法的更多相关文章
- 匈牙利算法与KM算法
匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...
- 【HDU2255】奔小康赚大钱-KM算法
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...
- HDU2255-奔小康赚大钱-二分图最大权值匹配-KM算法
二分图最大权值匹配问题.用KM算法. 最小权值的时候把权值设置成相反数 /*-------------------------------------------------------------- ...
- KM算法及其优化的学习笔记&&bzoj2539: [Ctsc2000]丘比特的烦恼
感谢 http://www.cnblogs.com/vongang/archive/2012/04/28/2475731.html 这篇blog里提供了3个链接……基本上很明白地把KM算法是啥讲清楚 ...
- poj 2195 KM算法
题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- HDU(2255),KM算法,最大权匹配
题目链接 奔小康赚大钱 Time Limit: 1000/1000MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 二分图 最大权匹配 km算法
这个算法的本质还是不断的找增广路: KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最 ...
- hdu 2255 奔小康赚大钱 KM算法
看到这么奇葩的题目名我笑了,后来这么一个裸的KM调了2小时我哭了…… 这是个裸的KM算法,也没什么多说的,主要是注意多组数据时,每次都要把各种数组清空啊,赋值啊什么的,反正比较麻烦.至于为什么调了2小 ...
随机推荐
- Visual Studio TFS
Overview:Active Directory环境下搭建TFS(一个domain内,with Domain Controller): 1)最简单的环境(这俩拓扑是从TFSAdmin文档中截取的,从 ...
- PHP——基本使用(二)
PHP与Apache Apache服务器在接受到客户端请求的时候,根据客户端所请求的文件的类型,然后去问模块能否处理此文件,php作为模块之一有可能可以处理此文件,处理之后将数据再返回给apache, ...
- Error parsing D:\sdkforas\android-sdk-windows\system-images\android-22\android-wear\x86\devices.xml
今天在工作过程中向Android Studio中导入一个项目,最后运行出现如下错误: Cannot reload AVD list: cvc-enumeration-valid: Value '280 ...
- Scrapy框架 之某网站产品采集案例
一.创建项目 第一步:scrapy startproject boyuan 第二步:cd boyuan scrapy genspider product -t crawl boyuan.com 如图 ...
- 事件的节流(throttle)与防抖(debounce)
事件的节流(throttle)与防抖(debounce) 有些浏览器事件可以在短时间内快速触发多次,比如调整窗口大小或向下滚动页面.例如,监听页面窗口滚动事件,并且用户持续快速地向下滚动页面,那么滚动 ...
- 16Oracle Database 系统权限和对象权限
Oracle Database 系统权限和对象权限 Oracle中的系统权限和对象权限 DCL 数据控制语言 -- 查看对象的权限 grant / revoke 查看登录用户 Show user 查看 ...
- JS数组——冒泡、插入、快速排序
前言:因为要对后端返回来的数据进行处理,之前之后冒泡,不够用,去看了插入跟快速,写下这篇笔记. 使用背景: 1.冒泡排序 数据比较少,小于1000 2.插入排序 数据比较少,大于1000不推荐 3.快 ...
- Spring学习开发之路——使用JavaBean代替EJB
Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发.从简单性.可测试性和松耦 ...
- Android 7.0系统代码调用安装apk时报错FileUriExposedException完美解决
项目更新遇到问题 Android项目开发中经常遇到下载更新的需求,以前调用系统安装器执行安装操作代码如下: Intent intent = new Intent(); intent.setActi ...
- NOIP 前的垂死挣扎
计划每天十题吧,可能会一天水题一天难题吧.题目以杂题为主,没有专题可言. 10.11 计划: [x] P2939 [USACO09FEB] 改造路 Revamping Trails [ ] P3601 ...