Q - Tour - hdu 3488(最小匹配值)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; const int MAXN = 205;
const int oo = 1e9+7; int g[MAXN][MAXN], slack[MAXN], N;
int dx[MAXN], dy[MAXN], Ly[MAXN];
bool vx[MAXN], vy[MAXN]; void InIt()
{
memset(Ly, false, sizeof(Ly));
memset(dy, false, sizeof(dy)); for(int i=1; i<=N; i++)
{
dx[i] = -oo;
for(int j=1; j<=N; j++)
g[i][j] = -oo;
}
}
bool Find(int i)
{
vx[i] = true;
for(int j=1; j<=N; j++)
{
if(!vy[j] && dx[i]+dy[j] == g[i][j])
{
vy[j] = true; if(!Ly[j] || Find(Ly[j]))
{
Ly[j] = i;
return true;
}
}
else if(!vy[j])
slack[j] = min(slack[j], dx[i]+dy[j]-g[i][j]);
} return false;
}
int KM()
{
int i, j; for(i=1; i<=N; i++)
{
for(j=1; j<=N; j++)
slack[j] = oo;
while(true)
{
memset(vx, false, sizeof(vx));
memset(vy, false, sizeof(vy)); if( Find(i) == true )break; int d = oo; for(j=1; j<=N; j++)
{
if(!vy[j] && d > slack[j])
d = slack[j];
} for(j=1; j<=N; j++)
{
if(vx[j])dx[j] -= d;
if(vy[j])dy[j] += d;
}
}
} int sum = 0; for(i=1; i<=N; i++)
sum += g[Ly[i]][i]; return -sum;
} int main()
{
int T; scanf("%d", &T); while(T--)
{
int M, u, v, w; scanf("%d%d", &N, &M);
InIt(); while(M--)
{
scanf("%d%d%d", &u, &v, &w);
g[u][v] = max(g[u][v], -w);
dx[u] = max(dx[u], g[u][v]);
} printf("%d\n", KM());
} return 0;
}
Q - Tour - hdu 3488(最小匹配值)的更多相关文章
- Tour HDU - 3488 有向环最小权值覆盖 费用流
http://acm.hdu.edu.cn/showproblem.php?pid=3488 给一个无源汇的,带有边权的有向图 让你找出一个最小的哈密顿回路 可以用KM算法写,但是费用流也行 思路 1 ...
- Tour HDU - 3488(最大权值匹配)
Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...
- hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Total ...
- HDU 1853 Cyclic Tour[有向环最小权值覆盖]
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Total ...
- HDU 3488 Tour (最大权完美匹配)【KM算法】
<题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...
- Hdu 3488 Tour (KM 有向环覆盖)
题目链接: Hdu 3488 Tour 题目描述: 有n个节点,m条有权单向路,要求用一个或者多个环覆盖所有的节点.每个节点只能出现在一个环中,每个环中至少有两个节点.问最小边权花费为多少? 解题思路 ...
- POJ 3565 Ants 【最小权值匹配应用】
传送门:http://poj.org/problem?id=3565 Ants Time Limit: 5000MS Memory Limit: 65536K Total Submissions: ...
- POJ 2195 Going Home 【二分图最小权值匹配】
传送门:http://poj.org/problem?id=2195 Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- POJ-2195 Going Home---KM算法求最小权值匹配(存负边)
题目链接: https://vjudge.net/problem/POJ-2195 题目大意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致.man每移动一格 ...
随机推荐
- POJ 2049 Finding Nemo
Finding Nemo Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 8631 Accepted: 2019 Desc ...
- 封装对Cookie和Session设置或取值的类
public class CookieHelper : System.Web.SessionState.IReadOnlySessionState { public static void Se ...
- Linq101-Quantifiers
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Quantif ...
- php 在web端读出pdf 与各种文件下载
单纯的下载功能实现 <?php // 表示调用文本类型为pdf的应用 header('Content-type: application/pdf'); // 这句可以输出下载页面进行下载 hea ...
- B/S系统间跨域单点登录设计思路
基于B/S系统间单点登录 此处说的单点登录的概念,即不同系统公用一个登录界面.一处系统通过登录验证,在接入的各系统均为登录状态.一般有两种情景: 1) 一级域名相同 例如:tieba.baidu.c ...
- oc总结
OC10天大纲 一.类和对象 1.什么是类? 同一种对象的抽象就是类. 2.什么是对象? 世界上的任何事物都可以称为对象,每个对象都有他自己的属性和行为. 3.如何创建一个类(请把一个.h和一个.m粘 ...
- Mysql软删除
所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删 ...
- Hive学习之二 《Hive的安装之自定义mysql数据库》
由于MySQL便于管理,在学习过程中,我选择MySQL. 一,配置元数据库. 1.安装MySQL,采用yum方式. ①yum install mysql-server,安装mysql服务端,安装服 ...
- hdu1301 Jungle Roads (Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 依旧Prim............不多说了 #include<iostream> ...
- underscorejs-some学习
2.11 some 2.11.1 语法: _.some(list, predicate, [context]) 2.11.2 说明: 对list集合的每个成员根据predicate进行真值检测,如果一 ...