题意:有N个城市,M条街道,每条街道是单向的,现在要你设计多条路线覆盖所有的点,每条路线都是一个环,并且每个点仅能被一条路线覆盖且只经过一次(终始点除外)

分析:因为是有向圈,所以每个点的入度和出度应该都是1,故将一个点拆成两个点,入度点和出度点,然后用最佳匹配即可!(因为最佳匹配是求最大值,故我们把边权设为负值即可!)

注意:这题有重边,题目太不道德了,有重边都不说,还要猜的啊!有些题没说有重边就没重边,有些题没说有重边但是它就是有重边!无敌了都!

// File Name: 3488.cpp
// Author: Zlbing
// Created Time: 2013/4/21 20:14:19

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
using namespace std;
#define CL(x,v); memset(x,v,sizeof(x));
#define INF 0x3f3f3f3f
#define LL long long
#define REP(i,r,n) for(int i=r;i<=n;i++)
#define RREP(i,n,r) for(int i=n;i>=r;i--)const int MAXN=205;
int N,M;
int Left[MAXN];
int w[MAXN][MAXN];
int Lx[MAXN],Ly[MAXN];
bool S[MAXN],T[MAXN];
bool match(int i)
{S[i]=true;for(int j=1;j<=N;j++)if(Lx[i]+Ly[j]==w[i][j]&&!T[j]){T[j]=true;if(Left[j]==0||match(Left[j])){Left[j]=i;return true;}}return false;
}
void update(){int a=INF;for(int i=1;i<=N;i++)if(S[i])for(int j=1;j<=N;j++)if(!T[j])a=min(a,Lx[i]+Ly[j]-w[i][j]);for(int i=1;i<=N;i++){if(S[i])Lx[i]-=a;if(T[i])Ly[i]+=a;}
}
void KM()
{for(int i=1;i<=N;i++){Left[i]=Lx[i]=Ly[i]=0;for(int j=1;j<=N;j++){Lx[i]=max(Lx[i],w[i][j]);}}for(int i=1;i<=N;i++){for(;;){CL(S,0);CL(T,0);if(match(i))break;else update();}}
}int main()
{int cas;scanf("%d",&cas);while(cas--){scanf("%d%d",&N,&M);REP(i,1,N)REP(j,1,N)w[i][j]=-INF;REP(i,1,M){int a,b,c;scanf("%d%d%d",&a,&b,&c);w[a][b]=max(w[a][b],-c);}KM();int ans=0;
//        REP(i,1,N){
//            REP(j,1,N)
//            printf("w[%d][%d]=%d ",i,j,w[i][j]);
//            printf("\n");
//            printf("Left[i]=%d\n",i,Left[i]);
//        }
REP(i,1,N){ans+=-w[Left[i]][i];}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/arbitrary/archive/2013/04/21/3034424.html

hdu-3488-Tour(KM最佳完美匹配)相关推荐

  1. HDU - 3488 Tour(二分图最小权匹配+KM)

    题目链接:点击查看 题目大意:给出n个城市,再给出m条有向的道路,问若想以一个或多个环的形式遍历所有的城市一次,所需要的最小权值是多少 题目分析:刚拿到这个题目是有点懵的,因为不知道题目让求什么,其实 ...

  2. 二分图最佳完美匹配——KM算法总结

    KM 算法 求解二分图最佳完美匹配的算法. 先来看一道例题Hdu 2255. 显然是KM的裸题.假设我们要匹配集合X和Y的点,先给每个点一个顶标Lx和Ly. 为什么要给顶标? 首先顶标是我们限制边的一 ...

  3. 二分图的最佳完美匹配(模板)

    二分图的最佳完美匹配,也就是带权值的无向二分图中权值之和最大的完美匹配,整个图分为两个不相交的集合x和y,采用KM算法求解,也称匈牙利算法. 时间复杂度为O(n^3) typedef int type ...

  4. UVA - 1045 The Great Wall Game(二分图最佳完美匹配)

    题目大意:给出棋盘上的N个点的位置.如今问将这些点排成一行或者一列.或者对角线的最小移动步数(每一个点都仅仅能上下左右移动.一次移动一个) 解题思路:暴力+二分图最佳完美匹配 #include < ...

  5. UVa 11383 少林决胜(二分图最佳完美匹配)

    https://vjudge.net/problem/UVA-11383 题意: 给定一个N×N矩阵,每个格子里都有一个正整数W(i,j).你的任务是给每行确定一个整数row(i),每列也确定一个整数 ...

  6. 二分图最佳完美匹配——KM算法

    前情概要 学km算法之前,笔者还是希望大家已经掌握了匈牙利算法--也就是对于求解二分图最大匹配的算法.学习本算法的前提除了已经掌握C++语言之外,还需要掌握邻接表存图法,不会的朋友这里有传送门 [微笑 ...

  7. 图论--二分图最佳完美匹配(KM模板)

    #include <iostream> #include <cstring> #include <cstdio>using namespace std; const ...

  8. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. Uvalive 4043 - Ants(二分图完美匹配)

    题目链接 https://vjudge.net/problem/UVALive-4043 [题意]        给出n个白点和n个黑点的坐标,要求用n条不相交的线段把它们连起来,其中每条线段恰好连接 ...

最新文章

  1. 【原创】Windows下使用 Eclipse 管理 RabbitMQ 源码之问题解决
  2. 什么是分布式任务调度
  3. Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)...
  4. 看完这篇 HTTP,跟面试官扯皮就没问题了
  5. 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)
  6. 视频教程-网络规划设计师5天修炼-软考
  7. mtk android高级工具,Android6.0 MTK6737 DCT 工具介绍 · Younix’s Studio
  8. 开源开发者 David Recordon 被任命白宫技术总监
  9. 80004005错误代码_win7系统出现错误代码0x80004005该如何解决
  10. maven 实战 (许晓斌)
  11. 计算不规则四边形(多边形)的面积
  12. Error (0xc0000225) installing Windows 7 on VirtualBox
  13. Unity中的警告--warning CS0108:'XXXX' hides inherited member 'AAAAA'. Use...的原因以及解决办法
  14. 地瓜叶:高纤高铁多 ,全身是宝
  15. 信号与系统 - 非周期信号的傅里叶变换
  16. 使用宏模拟offsetof
  17. Jmeter压测运行原理,这些你知道么?
  18. 手撕python_手撕LeetCode #1171——Python
  19. SQL Sever 2019的下载与安装【Win10一站式服务】
  20. 【大牛之路】大牛指导,报酬丰厚的开源项目---“谷歌编程之夏”

热门文章

  1. Linux---基础指令
  2. C++---string类接口整理与深浅拷贝
  3. 【零基础学Java】—继承父类并实现多个接口(二十五)
  4. 零基础带你学习MySQL—字符串相关的函数(十三)
  5. JavaScript学习(三十七)—实现右键自定义菜单的功能
  6. excel怎么批量插行_批量制作anki卡片最易上手方法
  7. 京东月薪8万招聘HR,岗位要求只有这3个字
  8. 在更新iOS14.5後,App要追踪我們會先收到彈窗提示
  9. 朋友借我10万并把房产证交给我,写了借条,并在借条上写明了用此房产做抵押,有效吗?
  10. 那些从小不干活的人,不做家务,不做饭的人后来怎么样了呀?