原文链接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的更多相关文章

  1. HDU3488 Tour —— 二分图最大权匹配 KM算法

    题目链接:https://vjudge.net/problem/HDU-3488 Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit ...

  2. Tour(KM算法)

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

  3. hdu3488 Tour 拆点+二分图最佳匹配

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

  4. HDU3488 Tour

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

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

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

  6. HDU3488 Tour [有向环覆盖 费用流]

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

  7. [kuangbin带你飞]专题十 匹配问题

        A-L 二分匹配 M-O 二分图多重匹配 P-Q 二分图最大权匹配 R-S 一般图匹配带花树 模板请自己找     ID Origin Title   61 / 72 Problem A HD ...

  8. HDU3488:Tour(KM算法)

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

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

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

随机推荐

  1. Sq lServer触发器的使用

    创建表: CREATE TABLE [dbo].[GeneralRule]( [ID] [int] NOT NULL, ) NULL, [DeleteFlag] [int] NOT NULL ) CR ...

  2. python学习第41天

    # 索引 # 认识mysql中的key # index key 普通索引,能够加速查询,辅助索引 # unique key 唯一 + 索引,辅助索引 # primary key 唯一 + 非空 + 聚 ...

  3. 时间格式化 Date-formatDate

    //日期格式化 export function formatDate(date,fmt){ var o = { "M+":date.getMonth() + 1,//月份 &quo ...

  4. Windows下Oracle 11g安装以及创建数据库

    安装数据库 事实上Oracle安装 1.安装准备 Oracle的安装包下载以后是两个压缩包,同时选中两个压缩包右击进行解压 2.解压完成如下图所示 3.双击 setup.exe 文件进行安装,会弹出以 ...

  5. SQL Server 2012-2016-2017 简体中文版下载和序列号

    注:本文来源于<SQL Server 2012-2016-2017 简体中文版下载和序列号> SqlServer 2017 下载地址及密钥 下载地址:ed2k://|file|cn_sql ...

  6. Confluence 6 使用 Apache 的 mod_jk

      在 Confluence 6 及其后续版本中,不能使用 mod_jk 来做代理.这是因为 Synchrony 服务导致的这个限制. Synchrony 在协同编辑的时候需要启动,同时还不能接受 A ...

  7. Confluence 6 字符集编码的问题解决

    如果你的 Confluence 站点的字符集没有被正确配置,你可能会遇到下面的问题: Non-ASCII 字符将会显示为问号(?) Non-ASCII 字符集的页面链接将不能工作 单一字符将会被显示为 ...

  8. Spark SQL访问PostgreSQL

    随着Spark SQL的正式发布,以及它对DataFrame的支持,它可能会取代HIVE成为越来越重要的针对结构型数据进行分析的平台.在博客文章What’s new for Spark SQL in ...

  9. 最长上升子序列(dp)

    链接:https://www.nowcoder.com/questionTerminal/d83721575bd4418eae76c916483493de来源:牛客网 广场上站着一支队伍,她们是来自全 ...

  10. 表达式语言 Expression Language

    JSP 2.0最重要的特性之一就是表达式语言 (EL),JSP用户可以用它来访问应用程序数据.由于 受到ECMAScript和XPath表达式语言的启发,EL也设计 成可以轻松地编写免脚本的JSP页面 ...