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].在 ...
随机推荐
- IDEA_MyBatis_SQLException:Parameter index out of range坑
报错信息:超出数据库数据表设定的规定长度了 nested exception is org.apache.ibatis.type.TypeException: Could not set parame ...
- Uva-oj Palindromes 暴力
Palindromes Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Statu ...
- POJ3026:Borg Maze (最小生成树)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18644 Accepted: 5990 题目链接:h ...
- boost文件锁的使用
boost中可以用boost::interprocess::file_lock类对文件进行加锁和解锁操作. #include <fstream> #include <iostream ...
- Java并发之同步原语
volatile: 定义:Java编程语言允许线程访问共享变量,为了确保共享变量内被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量.根据volatile的定义,volatile有锁的语义. ...
- 用Apache Spark和TensorFlow进行的深度学习
原文:https://databricks.com/blog/2016/01/25/deep-learning-with-apache-spark-and-tensorflow.html by Tim ...
- MongoDB入门(7)- SpringDataMongoDB
入门 本文介绍如何应用SpringDataMongoDB操作实体和数据库,本文只介绍最基本的例子,复杂的例子在后面的文章中介绍. SpringDataMongoDB简介 SpringDataMongo ...
- mysql 在查询结果中进行二次查询
第一次查询:查询身份证编号和出现次数 select cardid,count(cardid) as total from p_person_info group by cardid 在第一次查询结果进 ...
- 【游记】NOIP 2017
时间:2017.11.11~2017.11.12 地点:广东省广州市第六中学 Day1 T1:看到题目,心想这种题目也能放在T1? 这个结论我之前遇到过至少3次,自己也简单证明过.初见是NOIP200 ...
- 【NOIP】提高组2012 vigenere密码
[算法]模拟 #include<cstdio> #include<cstring> ; char sm[maxm],key[maxm],s[maxm]; int len,len ...