hdu 3435(KM算法最优匹配)
A new Graph Game
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2360 Accepted Submission(s): 951
undirected graph is a graph in which the nodes are connected by
undirected arcs. An undirected arc is an edge that has no arrow. Both
ends of an undirected arc are equivalent--there is no head or tail.
Therefore, we represent an edge in an undirected graph as a set rather
than an ordered pair.
Now given an undirected graph, you could delete
any number of edges as you wish. Then you will get one or more
connected sub graph from the original one (Any of them should have more
than one vertex).
You goal is to make all the connected sub graphs
exist the Hamiltonian circuit after the delete operation. What’s more,
you want to know the minimum sum of all the weight of the edges on the
“Hamiltonian circuit” of all the connected sub graphs (Only one
“Hamiltonian circuit” will be calculated in one connected sub graph!
That is to say if there exist more than one “Hamiltonian circuit” in one
connected sub graph, you could only choose the one in which the sum of
weight of these edges is minimum).
For example, we may get two possible sums:
(1) 7 + 10 + 5 = 22
(2) 7 + 10 + 2 = 19
(There are two “Hamiltonian circuit” in this graph!)
In
each case, the first line contains two integers n and m, indicates the
number of vertices and the number of edges. (1 <= n <=1000, 0
<= m <= 10000)
Then m lines, each line contains three integers
a,b,c ,indicates that there is one edge between a and b, and the weight
of it is c . (1 <= a,b <= n, a is not equal to b in any way, 1
<= c <= 10000)
“Case %d: “first where d is the case number counted from one. Then
output “NO” if there is no way to get some connected sub graphs that any
of them exists the Hamiltonian circuit after the delete operation.
Otherwise, output the minimum sum of weight you may get if you delete
the edges in the optimal strategy.
3 4
1 2 5
2 1 2
2 3 10
3 1 7
3 2
1 2 3
1 2 4
2 2
1 2 3
1 2 4
Case 2: NO
Case 3: 6
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int INF = ;
const int N = ;
int graph[N][N];
int lx[N], ly[N];
bool visitx[N], visity[N];
int slack[N];
int match[N];
int n,m;
bool Hungary(int u)
{
int temp;
visitx[u] = true;
for(int i = ; i <= n; ++i)
{
if(visity[i])
continue;
else
{
temp = lx[u] + ly[i] - graph[u][i];
if(temp == ) //相等子图
{
visity[i] = true;
if(match[i] == - || Hungary(match[i]))
{
match[i] = u;
return true;
}
}
else //松弛操作
slack[i] = min(slack[i], temp);
}
}
return false;
}
void KM()
{
int temp;
memset(match,-,sizeof(match));
memset(ly,,sizeof(ly));
for(int i = ;i <= n;i++) //定标初始化
lx[i] = -INF;
for(int i =;i<=n;i++)
for(int j=;j<= n;j++)
lx[i] = max(lx[i], graph[i][j]);
for(int i = ; i <= n;i++)
{
for(int j = ; j <= n;j++)
slack[j] = INF;
while()
{
memset(visitx,false,sizeof(visitx));
memset(visity,false,sizeof(visity));
if(Hungary(i))
break;
else
{
temp = INF;
for(int j = ; j <= n; ++j)
if(!visity[j]) temp = min(temp, slack[j]);
for(int j = ; j <= n; ++j)
{
if(visitx[j]) lx[j] -= temp;
if(visity[j]) ly[j] += temp;
else slack[j] -= temp;
}
}
}
}
}
int main()
{
int tcase;
int t= ;
scanf("%d",&tcase);
while(tcase--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
graph[i][j] = -INF;
}
}
for(int i=;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(u==v) continue;
graph[u][v] = graph[v][u] = max(graph[u][v],-w);
}
KM();
int ans = ;
bool flag = false;
for(int i=;i<=n;i++){
if(match[i]==-||graph[match[i]][i]==-INF){
flag = true;
break;
}
ans+=graph[match[i]][i];
}
printf("Case %d: ",t++);
if(flag)printf("NO\n");
else printf("%d\n",-ans);
}
return ;
}
hdu 3435(KM算法最优匹配)的更多相关文章
- hdu 2448(KM算法+SPFA)
Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- HDU 2255 KM算法 二分图最大权值匹配
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu 3488(KM算法||最小费用最大流)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- hdu 4862 KM算法 最小K路径覆盖的模型
http://acm.hdu.edu.cn/showproblem.php?pid=4862 选t<=k次,t条路要经过全部的点一次而且只一次. 建图是问题: 我自己最初就把n*m 个点分别放入 ...
- hdu 3395(KM算法||最小费用最大流(第二种超级巧妙))
Special Fish Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 1533 KM算法(权值最小的最佳匹配)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 3435 KM A new Graph Game
和HDU 3488一样的,只不过要判断一下是否有解. #include <iostream> #include <cstdio> #include <cstring> ...
- hdu 1853 KM算法
#include<stdio.h> #include<math.h> #include<string.h> #define N 200 #define inf 99 ...
- km算法(二分图最大权匹配)学习
啦啦啦! KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转 化为求完备匹配的问题的.设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j].在 ...
随机推荐
- 51nod 1275 连续子段的差异(twopointer+单调队列)
对于每一个i找到最近的j满足最大值-最小值>K,对答案的贡献为j-i,用单调队列维护最值即可 #include<iostream> #include<cstdlib> # ...
- luoguP1357 花园
矩阵乘法优化dp 注意环形处理: 发现,对于一个初始状态s的方案数,就是填n次后,再回到自己的状态.期间都是合法的话,那么一定这个方案就合法. 和开始状态有关.所以先把状态转移矩阵的(n-m)乘出来. ...
- @RequestParam 注解的使用
@RequestParam 注解的使用 前言 在SpringMvc后台进行获取数据,一般是两种. 1.request.getParameter(“参数名”) 2.用@RequestParam注解获取 ...
- [10.12模拟赛] 老大 (二分/树的直径/树形dp)
[10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...
- [zabbix]zabbix分区表操作步骤
Q&A: 1.mul key: . 如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列 . 如果Key是PRI, 那么该列是主键的组成部分 . ...
- syslog大小限制
位置 /etc/logrotate.d/rsyslog 相关配置信息察看man logrotate size k/M/G /var/log/syslog { rotate daily missingo ...
- bzoj 2124 等差子序列 树状数组维护hash+回文串
等差子序列 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 1919 Solved: 713[Submit][Status][Discuss] Desc ...
- Itext2.0.8 和freemarker导出pdf
这个是跟上一篇写的freemarker导出word是一块的.但是关联性不是很大.由于本人技术有限本篇导出也是根据网上大家的做出的demo混合而成.有不足的地方请大家指出.好改正,使以后看到的freem ...
- Axis2 WebService(配置、发布、调用)
准备工作 1.下载:axis2-1.5.4-bin.zip,axis2-1.5.4-war.zip 下载地址:http://axis.apache.org/axis2/java/core/ 2.环境变 ...
- 图论:Floyd-多源最短路、无向图最小环
在最短路问题中,如果我们面对的是稠密图(十分稠密的那种,比如说全连接图),计算多源最短路的时候,Floyd算法才能充分发挥它的优势,彻彻底底打败SPFA和Dijkstra 在别的最短路问题中都不推荐使 ...