<九度 OJ>题目1545:奇怪的连通图
- 题目描写叙述:
-
已知一个无向带权图,求最小整数k。使仅使用权值小于等于k的边,节点1能够与节点n连通。
- 输入:
-
输入包括多组測试用例。每组測试用例的开头为一个整数n(1 <= n <= 10000)。m(1 <= m <= 100000)。代表该带权图的顶点个数,和边的个数。
接下去m行,描写叙述图上边的信息。包含三个整数,a(1 <= a <= n),b(1 <= b <= n),c(1 <= c <= 1000000),表示连接顶点a和顶点b的无向边。其权值为c。
- 输出:
-
输出为一个整数k,若找不到一个整数满足条件。则输出-1。
- 例子输入:
-
3 3
1 3 5
1 2 3
2 3 2
3 2
1 2 3
2 3 5
3 1
1 2 3
- 例子输出:
-
3
5
-1
分析:
并查集+最小生成树:运用并查集依据题目数据联立顶点,然后对边排序,贪心的从最小边開始找,再查看题目要求的1节点和n节点是否连接就可以
#include <cstdio>
#include <ctype.h>
#include <cstdlib>
#include "queue"
#include "vector"
#include "string"
#include "algorithm"
#include <iostream>
#include "stack"
#include <cmath>
#include <set> using namespace std; class Edge
{
public:
Edge()
{
dst = 0;
}
int avex;
int bvex;
int dst;
bool operator <(const Edge &mode) const
{
return dst<mode.dst;
}
}; Edge edge[111000]; class UFSet
{
public:
UFSet(int nsize)
{
parent = new int[nsize + 1];
}
~UFSet()
{
delete[] parent;
parent = NULL;
} // 初始化每一个顶点的祖先为自身
void makeSet(int n); // 找到元素x的祖先元素
int findSet(int x); void makeMST(int m, int n);
private:
int *parent;//存放祖先节点,比如x=parent[i],元素i的祖先节点为元素x }; void UFSet::makeSet(int n) //初始化
{
for (size_t i = 1; i <= n; i++)
parent[i] = i;
} int UFSet::findSet(int x)
{ if (parent[x] == x)
return x; parent[x] = findSet(parent[x]);
return parent[x];
} void UFSet::makeMST(int m, int n)
{
sort(edge + 1, edge + m + 1);//必须先对边排序(依据边的修建费用),这样才干贪心的形成最小花费 for (int i = 1; i <= m; i++)
{
int baseA = findSet(edge[i].avex);//找到集合中的最高祖先
int baseB = findSet(edge[i].bvex); if (baseA != baseB)//两个顶点仅仅要不在一个集合就能够採用这条边。并合并两个集合
parent[baseA] = baseB;//合并两个最高祖先 if (findSet(n) == findSet(1))
{
cout << edge[i].dst << endl;
return;
}
}
cout << "-1" << endl;
}
int main()
{
int n = 0, m = 0;
while (cin >> n >> m)
{
UFSet uset(n);
uset.makeSet(n);//初始化每一个城市的祖先为自身
for (int i = 1; i <= m; i++)
scanf("%d%d%d", &edge[i].avex, &edge[i].bvex, &edge[i].dst);
uset.makeMST(m, n);
}
return 0;
}
/**************************************************************
Problem: 1545
User: EbowTang
Language: C++
Result: Accepted
Time:650 ms
Memory:2820 kb
****************************************************************/
注:本博文为EbowTang原创,兴许可能继续更新本文。假设转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50536944
原作者博客:http://blog.csdn.net/ebowtang
<九度 OJ>题目1545:奇怪的连通图的更多相关文章
- 【九度OJ】题目1026:又一版 A+B 解题报告
[九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...
- 【九度OJ】题目1124:Digital Roots 解题报告
[九度OJ]题目1124:Digital Roots 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1124 题目描述: T ...
- 【九度OJ】题目1074:对称平方数 解题报告
[九度OJ]题目1074:对称平方数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1074 题目描述: 打印所有不超过n( ...
- 【九度OJ】题目1064:反序数 解题报告
[九度OJ]题目1064:反序数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1064 题目描述: 设N是一个四位数,它的 ...
- 【九度OJ】题目1083:特殊乘法 解题报告
[九度OJ]题目1083:特殊乘法 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1083 题目描述: 写个算法,对2个小于 ...
- 【九度OJ】题目1183:守形数 解题报告
[九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...
- 【九度OJ】题目1015:还是A+B 解题报告
[九度OJ]题目1015:还是A+B 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1015 题目描述: 读入两个小于10000的正整 ...
- 【九度OJ】题目1201:二叉排序树 解题报告
[九度OJ]题目1201:二叉排序树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1201 题目描述: 输入一系列整数,建立二叉排序 ...
- 【九度OJ】题目1176:树查找 解题报告
[九度OJ]题目1176:树查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1176 题目描述: 有一棵树,输出某一深度的所有节点 ...
随机推荐
- Spring配置文件中指定init-method属性的作用
bean 配置文件属性 init-method 用于在bean初始化时指定执行方法,用来替代继承 InitializingBean接口.相关链接:https://www.cnblogs.com/Joe ...
- 监控Apache计数器
- windows下使用libsvm3.2
一.官方介绍 libsvm主页:https://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html libsvm介绍文档:http://www.csie.ntu. ...
- MyEclipse2014高速配置Spring & Spring Testing, Spring AOP简单使用
1.新建项目 2.右击项目,如图,利用myeclipse自己主动导入spring 3.在弹出的对话框中一直next到最后,在最后的页面中勾选Spring Testing,完毕. watermark/2 ...
- Linux网络编程(3)——多进程、多线程
在我的里面已经介绍了linux以下c的进程.线程接口,这里就不做过多阐述了. 多进程 这里多进程採用传统的多进程模型.每当有client发来的连接时创建一个进程来处理连接,一个子进程相应一个连接. 有 ...
- POJ 3664 Election Time 题解
这道题网上非常多人都会说easy,水题之类的话,只是我看了下说这种话的人的程序,能够说他们的程序都不及格! 为什么呢?由于他们的程序都是使用简单的二次排序水过(大概你能搜索到的多是这种程序).那样自然 ...
- Android sdCard路径问题
一,获取Android设备的全部存储设备,这里边肯定有一个能用的 StorageManager sm = (StorageManager) context.getSystemService(Conte ...
- True or False? and WHY??? Java HashSet Contains
import java.util.HashSet; public class MyClass { public String s; public MyClass(String s) { this.s ...
- nyoj--983--首尾相连数组的最大子数组和(动态规划)
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
- hdoj--4325--Flowers(线段树+二分)
Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...