HDU - 3488 Tour (KM最优匹配)
题意:对一个带权有向图,将所有点纳入一个或多个环中,且每个点只出现一次,求其所有环的路径之和最小值。
分析:每个点都只出现一次,那么换个思路想,每个点入度出度都为1。将一个点拆成两个点,一个作为入度点,一个作为出度点。每个入度点都和一个出度点匹配,且不为自己。那么可以将问题转化为二分图最优匹配的问题,这里我们求得是最短路径,那么建图时,把权值取反。这样最优匹配后取反就是最短的路径。
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std; typedef long long LL;
const int maxn =;
const int INF=0x3f3f3f3f;
int w[maxn][maxn];
int m,n;//n左m右
int cx[maxn],cy[maxn];//顶标
bool usex[maxn],usey[maxn];//本回合使用的x,y
int link[maxn];//link[i]=x代表:在y图中的i与x相连 void init()
{
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
w[i][j]=-INF; //初始为负
} bool dfs(int u){
usex[u]=;
for(int i=;i<=m;i++)
if(!usey[i]&&cx[u]+cy[i]==w[u][i]){
usey[i]=;
if(link[i]==-||dfs(link[i])){
link[i]=u;
return true;
}
}
return false;
}
int KM(){
memset(cy,,sizeof(cy));
memset(cx,-,sizeof(cx));
memset(link,-,sizeof(link));
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
cx[i]=max(cx[i],w[i][j]);
for(int i=;i<=n;i++){
while(){
int d=INF;
memset(usex,,sizeof(usex));
memset(usey,,sizeof(usey));
if(dfs(i))break;
for(int i=;i<=n;i++)
if(usex[i])
for(int j=;j<=m;j++)
if(!usey[j])d=min(d,cx[i]+cy[j]-w[i][j]);
if(d==INF)return -;
for(int i=;i<=n;i++)
if(usex[i])cx[i]-=d;
for(int i=;i<=m;i++)
if(usey[i])cy[i]+=d;
}
}
int ans=;
for(int i=;i<=m;i++)
if(~link[i]) ans+=w[link[i]][i];
return ans;
} int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int T,N,M,u,v,tmp;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M); n=m=N;
init();
for(int i=;i<=M;++i){
scanf("%d%d%d",&u,&v,&tmp);
w[u][v]=max(w[u][v],-tmp); //可能有重边,坑点
}
int res=-KM();
printf("%d\n",res);
}
return ;
}
HDU - 3488 Tour (KM最优匹配)的更多相关文章
- Hdu 3488 Tour (KM 有向环覆盖)
题目链接: Hdu 3488 Tour 题目描述: 有n个节点,m条有权单向路,要求用一个或者多个环覆盖所有的节点.每个节点只能出现在一个环中,每个环中至少有两个节点.问最小边权花费为多少? 解题思路 ...
- HDU 3488 Tour (最大权完美匹配)【KM算法】
<题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...
- POJ 2516 Minimum Cost (KM最优匹配)
题意:有N家家店,每家店都对K种货物有需求:同时有M家仓库,对K钟货物有供应.对于每种货物,每个仓库送至每家店都有自己的单位费用.求满足所有店所有货物的最小费用 分析:对于每一种货物,如果总需求大于总 ...
- Tour HDU - 3488(最大权值匹配)
Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...
- 图论(二分图,KM算法):HDU 3488 Tour
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- hdu 3488 Tour
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意:给你一个N个顶点M条边的带权有向图,要你把该图分成1个或多个不相交的有向环.且所有定点都只 ...
- HDU 3488 Tour(最小费用流:有向环最小权值覆盖)
http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意: 给出n个点和m条边,每条边有距离,把这n个点分成1个或多个环,且每个点只能在一个环中,保证有解. ...
- hdu 3488(KM算法||最小费用最大流)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)
/** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...
随机推荐
- 修改原型给数组对象添加forEach
Array.prototype.forEach = function (callback, context) { for (var i = 0; i < this.length; i++) { ...
- css3 html5画心
以下内容不是原创 我是搬运工 1. <!DOCTYPE HTML><html> <head> <meta charset="UTF-8"/ ...
- vmware 虚拟机下 ubuntu 与主机共享锐捷
一直以来.想要学习 linux ,在 vm 虚拟机下安装了 ubuntu 系统. 可是这个系统并不能上网.原因就是 vm 虚拟机的虚拟网卡会和锐捷冲突.锐捷会检測到多网卡,断开网络,所以不得不禁用 v ...
- Castle.MVC框架介绍
Castle.MVC目前还在Castle的Sandbox中,只是在源代码管理中有,还没有向外发布版本,这里介绍多时Web的MVC,和Castle的MonoRail相比较,这个MVC可以Asp.Net的 ...
- SpringBoot专题1----springboot与mybatis的完美融合
springboot大家都知道了,搭建一个spring框架只需要秒秒钟.下面给大家介绍一下springboot与mybatis的完美融合: 首先:创建一个名为springboot-mybatis的ma ...
- Redisson教程
Redisson入门 Author:Ricky Date:2017-04-24 Redisson概述 Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Dat ...
- UNION ALL与UNION
UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列 ...
- hdu 4512 吉哥系列故事——完美队形I【LCIS经典应用】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4512 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- Powershell About LocalGroupMembership
一: 结合active directory获取本地群组成员信息(包含本地用户和域用户,及域用户的情况 $DBServer = "xxxx" $DBDatabase = " ...
- Downgrading an Exchange 2010 Server(Exchange降级)
Downgrading an Exchange 2010 Server Microsoft Exchange Server 2010 comes in two versions: enterprise ...