HDU3488 Tour KM
原文链接http://www.cnblogs.com/zhouzhendong/p/8284304.html
题目传送门 - HDU3488
题意概括
给一个n的点m条边的有向图。
然后让你把这个图分成许多环,问环中边权和最小为多少。
题目保证一定存在合法的方案。
题解
我们把每一个点扯成两个点。
一个专门接受入度,一个专门接受出度,然后就是KM裸题了。
数组模拟链表可能会比邻接矩阵快一些。
代码
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <cstdio>
using namespace std;
const int INF=1e9+7;
const int N=205,M=30005;
struct Gragh{
int cnt,y[M],z[M],nxt[M],fst[N];
void clear(){
cnt=0;
memset(fst,0,sizeof fst);
}
void add(int a,int b,int c){
y[++cnt]=b,z[cnt]=c,nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
int T,n,m,match[N],ex[N],ey[N],minadd[N];
bool visx[N],visy[N];
bool Match(int x){
visx[x]=1;
for (int i=g.fst[x];i;i=g.nxt[i]){
int y=g.y[i];
if (visy[y])
continue;
int add=ex[x]+ey[y]-g.z[i];
if (!add){
visy[y]=1;
if (!match[y]||Match(match[y])){
match[y]=x;
return 1;
}
}
else
minadd[y]=min(minadd[y],add);
}
return 0;
}
int KM(){
memset(match,0,sizeof match);
memset(ey,0,sizeof ey);
for (int i=1;i<=n;i++){
ex[i]=-INF;
for (int j=g.fst[i];j;j=g.nxt[j])
ex[i]=max(ex[i],g.z[j]);
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++)
minadd[j]=INF;
while (1){
memset(visx,0,sizeof visx);
memset(visy,0,sizeof visy);
if (Match(i))
break;
int d=INF;
for (int j=1;j<=n;j++)
if (!visy[j])
d=min(d,minadd[j]);
for (int j=1;j<=n;j++){
if (visx[j])
ex[j]-=d;
if (visy[j])
ey[j]+=d;
else
minadd[j]-=d;
}
}
}
int ans=0;
for (int i=1;i<=n;i++){
int Max=-INF;
for (int j=g.fst[match[i]];j;j=g.nxt[j])
if (g.y[j]==i)
Max=max(Max,g.z[j]);
ans+=Max;
}
return ans;
}
int main(){
scanf("%d",&T);
while (T--){
scanf("%d%d",&n,&m);
g.clear();
for (int i=1,a,b,c;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
g.add(a,b,-c);
}
printf("%d\n",-KM());
}
return 0;
}
HDU3488 Tour KM的更多相关文章
- HDU3488 Tour —— 二分图最大权匹配 KM算法
题目链接:https://vjudge.net/problem/HDU-3488 Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit ...
- Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submi ...
- hdu3488 Tour 拆点+二分图最佳匹配
In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one-way r ...
- HDU3488 Tour
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submi ...
- Hdu 3488 Tour (KM 有向环覆盖)
题目链接: Hdu 3488 Tour 题目描述: 有n个节点,m条有权单向路,要求用一个或者多个环覆盖所有的节点.每个节点只能出现在一个环中,每个环中至少有两个节点.问最小边权花费为多少? 解题思路 ...
- HDU3488 Tour [有向环覆盖 费用流]
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- [kuangbin带你飞]专题十 匹配问题
A-L 二分匹配 M-O 二分图多重匹配 P-Q 二分图最大权匹配 R-S 一般图匹配带花树 模板请自己找 ID Origin Title 61 / 72 Problem A HD ...
- HDU3488:Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- 图论(二分图,KM算法):HDU 3488 Tour
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
随机推荐
- Linux命令之control快捷键组合
***********************Linux系统中的一些control快捷键组合汇总如下************************ ctrl+a:光标移到行首. ctrl+b:光标左 ...
- 《MySQL5.7从入门到精通(视频教学版)》
· 一:书籍PDF获取途径 pdf 文档 在 此QQ群(668345923) 的群文件里面 学习视频资源 二:书籍介绍 本书主要包括MySQL的安装与配置.数据库的创建.数据表的创建.数据类型和运算符 ...
- 实用的sublime插件集合 – sublime推荐必备插件
Package Control 功能:安装包管理 简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能 使用:https://sublime.wbond.net/installatio ...
- opencv 图像矫正
四个坐标系的转换:https://blog.csdn.net/humanking7/article/details/44756073 标定和矫正:https://blog.csdn.net/u0134 ...
- Best Free Hacking E-Books 2017 In PDF Format
1.Best Free Hacking E-Books 2017 In PDF Format: 电子书籍下载地址 后续我会更新在我的百度云资源 上,需要的留言Black Belt Hacking &a ...
- java子类继承关系
1.java的类按照继承关系的树形结构所有的类其根节点都是object类,一个类有两种重要的成员,一是变量 .二是方法.子类继承不能继承父类中被声明为private的变量和方法. public cla ...
- Spring JDBC概述
1.jdbc 概述 Spring JDBC是Spring框架的持久层子框架.用于对数据库的操作(增删改查). 而JdbcTemplate它是spring jdbc子框架中提供的一个操作类,用于对原始J ...
- codeforce 240E
/* 最小树形图+保存路径 第一次想错了,各种wa,tle后网上看资料,找到一篇错误的题解... 最后用对着正解分析了一波,感觉对最小树形图又有了新的理解:最小树形图的精髓在于每张图更新的时间信息! ...
- Nginx详解二十七:Nginx架构篇之安全篇
1.常见的恶意行为:爬虫行为和恶意抓取.资源盗用 解决方案: 基础防盗链功能:不让恶意用户能轻易爬去网站对外数据 secure_link_module模块:对数据安全性提高,加密验证和失效性,适合核心 ...
- python目录和文件的列表清单
import os # 通过给定的文件夹,列举出这个文件夹当中,所有的文件,以及文件夹,子文件夹当中的所有文件def listFilesToTxt(dir,file): # 1.列举出,当前给定的文件 ...