POJ 1679:The Unique MST(次小生成树&&Kruskal)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 19941 | Accepted: 6999 |
Description
Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties:
1. V' = V.
2. T is connected and acyclic.
Definition 2 (Minimum Spanning Tree): Consider an edge-weighted, connected, undirected graph G = (V, E). The minimum spanning tree T = (V, E') of G is the spanning tree that has the smallest total cost. The total cost of T means the sum of the weights on all
the edges in E'.
Input
triple (xi, yi, wi), indicating that xi and yi are connected by an edge with weight = wi. For any two nodes, there is at most one edge connecting them.
Output
Sample Input
2
3 3
1 2 1
2 3 2
3 1 3
4 4
1 2 2
2 3 2
3 4 2
4 1 2
Sample Output
3
Not Unique!
这道题就是要你推断是否为唯一的最小生成树。。
这也是我第一道次小生成树的题。。那个PDF资料真是太好了。。我用的是Kruskal。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath> using namespace std; const int max1 = 105;
const int max2 = 10005; struct node
{
int u, v, w;//边的顶点以及权值
int r;//用于记录边的序号
int used;//用于记录边是否被使用过
}edge[max2];//边的数组 int parent[max1];//顶点i所在集合相应树中的根节点
int n, m;//顶点数,边的个数
int cas; void start()//初始化
{
for(int i=1; i<=n; i++)
parent[i] = i;
} int find (int x)//查找并返回节点x所属集合的根节点
{
return parent[x] == x ? x : parent[x] = find ( parent[x] );
} bool cmp ( node a, node b )//按权值从小到大排序
{
return a.w < b.w;
} int Kruskal()//第一次求最小生成树
{
sort( edge+1, edge+m+1, cmp );
int ans = 0;
for(int i=1; i<=m; i++)
{
int e = edge[i].r;
int x = find( edge[i].u );
int y = find( edge[i].v );
if( x!=y )
{
parent[y] = x;
ans += edge[i].w;
edge[e].used = 1;
}
}
return ans;
} int Kruskal_again(int tt)//求次小生成树
{
sort( edge+1, edge+m+1, cmp );
int ans = 0;
for(int i=1; i<=m; i++)
{
if( tt==edge[i].r )
continue;
int x = find( edge[i].u );
int y = find( edge[i].v );
if( x!=y )
{
parent[y] = x;
ans += edge[i].w;
}
}
return ans;
} bool judge()//推断是否能就得最小生成树,即看是否有孤立的点
{
for(int i=1; i<=n; i++)
if( find(i) != find(1) )
return false;
return true;
} int main()
{
scanf("%d", &cas);
while( cas-- )
{
scanf("%d%d", &n, &m);
start();
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w);
edge[i].used = 0;
edge[i].r = i;
}
int flag = 0;
int ans1 = Kruskal();
for(int i=1; i<=m; i++)//一一枚举求最小生成树。。
{
if( !edge[i].used )
continue;
start();
int ans2 = Kruskal_again(i);//求除去此边的最小生成树
if( ans1 == ans2 && judge() )
{
flag = 1;//标记结论
break;
}
}
if( flag )
printf("Not Unique!\n");
else
printf("%d\n", ans1);
}
return 0;
}
POJ 1679:The Unique MST(次小生成树&&Kruskal)的更多相关文章
- poj 1679 The Unique MST (次小生成树(sec_mst)【kruskal】)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35999 Accepted: 13145 ...
- POJ 1679 The Unique MST (次小生成树)
题目链接:http://poj.org/problem?id=1679 有t组数据,给你n个点,m条边,求是否存在相同权值的最小生成树(次小生成树的权值大小等于最小生成树). 先求出最小生成树的大小, ...
- POJ 1679 The Unique MST (次小生成树 判断最小生成树是否唯一)
题目链接 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. De ...
- POJ 1679 The Unique MST (次小生成树kruskal算法)
The Unique MST 时间限制: 10 Sec 内存限制: 128 MB提交: 25 解决: 10[提交][状态][讨论版] 题目描述 Given a connected undirect ...
- poj 1679 The Unique MST 【次小生成树】【模板】
题目:poj 1679 The Unique MST 题意:给你一颗树,让你求最小生成树和次小生成树值是否相等. 分析:这个题目关键在于求解次小生成树. 方法是,依次枚举不在最小生成树上的边,然后加入 ...
- POJ 1679 The Unique MST 【最小生成树/次小生成树模板】
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22668 Accepted: 8038 D ...
- POJ1679 The Unique MST —— 次小生成树
题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total S ...
- poj 1679 The Unique MST
题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...
- poj 1679 The Unique MST(唯一的最小生成树)
http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submis ...
- poj 1679 The Unique MST (判定最小生成树是否唯一)
题目链接:http://poj.org/problem?id=1679 The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total S ...
随机推荐
- 关系数据库标准语言SQL的基本问答
1 .试述 sQL 语言的特点. 答: (l)综合统一. sQL 语言集数据定义语言 DDL .数据操纵语言 DML .数据控制语言 DCL 的功能于一体. (2)高度非过程化.用 sQL 语言进行数 ...
- Eric6 右键点击生产对话框代码报错
问题没有解决,属于菜鸟级别的孩子~~~~ 求助啊,求助!!!!!! 报告如下: Warning:An unhandled exception occurred. Please report the p ...
- #pragma anon_unions, #pragma no_anon_unions
#pragma anon_unions, #pragma no_anon_unions 这些编译指示启用和禁用对匿名结构和联合的支持. 缺省设置 缺省值为 #pragma no_anon_unions ...
- AndroidAutoLayout 屏幕适配
https://github.com/hongyangAndroid/AndroidAutoLayout
- javascript关键字加亮加连接
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/str ...
- python-认识Socket[入门篇]
什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链 ...
- How many ways(记忆化搜索)
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- C#高效导出Excel(IList转DataTable,DataSet)
微软的Excel操作类导出Excel会很慢,此方法简单的把表中内容以字符串的形式写入到Excel中,用到的一个技巧就是"\t". C#中的\t相当于Tab键,写入到Excel中时就 ...
- IIS7中配置脚本错误解决方案
同一个项目, 又建另一站点(相同的物理路径,) ,结果出下上图404.0错误, 原来是win7下应用程序池默认的32应用程序属性影响,参考下图,设置为True. 同一个项目, 又建另一站 ...
- Android UI高级交互设计Demo
首先:是google的新标准 Google Material design 开源项目 1.直接拿来用!十大Material Design开源项目 2.收集android上开源的酷炫的交互动画和视觉效果 ...