题意:对一个带权有向图,将所有点纳入一个或多个环中,且每个点只出现一次,求其所有环的路径之和最小值。

分析:每个点都只出现一次,那么换个思路想,每个点入度出度都为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最优匹配)的更多相关文章

  1. Hdu 3488 Tour (KM 有向环覆盖)

    题目链接: Hdu 3488 Tour 题目描述: 有n个节点,m条有权单向路,要求用一个或者多个环覆盖所有的节点.每个节点只能出现在一个环中,每个环中至少有两个节点.问最小边权花费为多少? 解题思路 ...

  2. HDU 3488 Tour (最大权完美匹配)【KM算法】

    <题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...

  3. POJ 2516 Minimum Cost (KM最优匹配)

    题意:有N家家店,每家店都对K种货物有需求:同时有M家仓库,对K钟货物有供应.对于每种货物,每个仓库送至每家店都有自己的单位费用.求满足所有店所有货物的最小费用 分析:对于每一种货物,如果总需求大于总 ...

  4. Tour HDU - 3488(最大权值匹配)

    Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...

  5. 图论(二分图,KM算法):HDU 3488 Tour

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  6. hdu 3488 Tour

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意:给你一个N个顶点M条边的带权有向图,要你把该图分成1个或多个不相交的有向环.且所有定点都只 ...

  7. HDU 3488 Tour(最小费用流:有向环最小权值覆盖)

    http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意: 给出n个点和m条边,每条边有距离,把这n个点分成1个或多个环,且每个点只能在一个环中,保证有解. ...

  8. hdu 3488(KM算法||最小费用最大流)

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  9. hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)

    /** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...

随机推荐

  1. php ocket通信机制

    php 实例说明 socket通信机制 一,socket是什么 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通 ...

  2. jfinal整合妹子UI初步完成

  3. 修改net基本三层 动软生产

    控制层(dal) 模型层-实体类(Model) 显示层-web

  4. java 理解java的三大特性之封装

    使用封装有三大好处: 1.良好的封装能够减少耦合. 2.类内部的结构可以自由修改. 3.可以对成员进行更精确的控制. 4.隐藏信息,实现细节. public class Wife { private ...

  5. elasticsearch.net search入门使用指南中文版

    原文:http://edu.dmeiyang.com/book/nestusing.html elasticsearch.net为什么会有两个客户端? Elasticsearch.Net是一个非常底层 ...

  6. sql 循环表中记录

    =========================================================================循环排序查询数据=================== ...

  7. windows安装oracle11g

    windows上安装oracle11g   1.下载Oracle 11g R2 for Windows的版本 下载地址:https://www.oracle.com/technetwork/datab ...

  8. 【BZOJ4557】[JLoi2016]侦察守卫 树形DP

    [BZOJ4557][JLoi2016]侦察守卫 Description 小R和B神正在玩一款游戏.这款游戏的地图由N个点和N-1条无向边组成,每条无向边连接两个点,且地图是连通的.换句话说,游戏的地 ...

  9. T-SQL with关键字 with as 递归循环表

    )SET @OrgId = N'901205CA-6C22-4EE7-AE4B-96CC7165D07F'; WITH Childs AS ( SELECT * FROM HROrgRelation ...

  10. python类的相关知识第一部分

    一.类的相关概念 (1).什么是类 具有同种属性的对象称为类,是个抽象的概念.比如说:汽车.人.狗.神: (2).什么是对象或实例 日常生活中的所有东西都是对象,是类的实例化.比如说:推土车是汽车的实 ...