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 ...
随机推荐
- SpringBoot中常见注解含义总结
@RestController @RestController被称为一个构造型(stereotype)注解.它为阅读代码的开发人员提供建议.对于Spring,该类扮演了一个特殊角色.它继承自@Cont ...
- java使用spark/spark-sql处理schema数据
1.spark是什么? Spark是基于内存计算的大数据并行计算框架. 1.1 Spark基于内存计算 相比于MapReduce基于IO计算,提高了在大数据环境下数据处理的实时性. 1.2 高容错性和 ...
- Go斐波拉契数列(Fibonacci)(多种写法)
1 前言 斐波拉契数列有递归写法和尾递归和迭代写法. 2 代码 //recursion func fib(n int) int{ if n < 2{ return n }else{ return ...
- [JavaScript]iframe的contentWindow
HTMLIFrameElement.contentWindow返回的是HTMLIFrameElement类型元素的window对象 通过此对象可以修改iframe实体内的window行为 <if ...
- CSS margin合并
外边距合并 块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距 发生外边距合并的三种基本情况 1. 相邻的兄弟姐妹元素 <div id="marg ...
- Confluence 6 诊断
当你对性能进行诊断或者希望知道是什么原因导致 Confluence 崩溃,你希望知道在 Confluence 内部是什么导致这些问题发生的.这个时候系统的诊断信息能够帮助你获得更多的有关的这些信息. ...
- Confluence 6 数据库表-展现(Appearance)
这部分存储了有关你 Confluence 的外观和布局使用的信息. decorator 使用自定义 Velocity 布局显示的自定义模板. https://www.cwiki.us/display/ ...
- Confluence 6 升级你的许可证
如果你修改了你的许可证(例如为你的许可证增加了更多的用户),或者从 Cloud 中整合到你本地,你需要更新你的许可证. 希望更新你的额许可证: 进入 > 基本配置(General Config ...
- FromData获取表单数据
一般想要不刷新页面提交数据时,可以使用ajax提交.如果数据量不大可以自己写json数据用ajax提交到后台服务,但是数据量多且需要动态添加数据时,自己写json格式数据就有点麻烦了,这时候就需要Fo ...
- antDesign 使用Form并进行表单验证
import React from 'react'; import {Form,Input,Select,Button ...} from 'antd'; class PageName extends ...