[Jobdu] 题目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
开始看到题目感觉好复杂,先想到的是二分查找,可是即使是二分查找,复杂度也太高了。其实这题就是考并查集,按边的长度排序,第一次发现n与1连通时的边就是所求的k。因为已经排过序了。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std; struct edge_t {
int a, b;
int dist;
}; int n, m;
vector<edge_t> edges;
vector<int> father; int findFather(int x) {
while (x != father[x]) {
x = father[x];
}
return x;
} bool cmp(const edge_t &a, const edge_t &b) {
return a.dist < b.dist;
} void init() {
for (int i = ; i < father.size(); ++i)
father[i] = i;
sort(edges.begin(), edges.end(), cmp);
} void solve() {
for (int i = ; i < m; ++i) {
int fa = findFather(edges[i].a);
int fb = findFather(edges[i].b);
if (fa < fb) father[fb] = fa;
else father[fa] = fb;
if (findFather(n) == ) {
cout << edges[i].dist << endl;
return;
}
}
cout << "-1" << endl;
} int main() {
while (scanf("%d %d", &n, &m) != EOF) {
father.resize(n + );
edges.resize(m);
for (int i = ; i < m; ++i) {
scanf("%d %d %d", &edges[i].a, &edges[i].b, &edges[i].dist);
}
init();
solve();
}
return ;
}
/**************************************************************
Problem: 1545
User: hupo250
Language: C++
Result: Accepted
Time:640 ms
Memory:2248 kb
****************************************************************/
[Jobdu] 题目1545:奇怪的连通图的更多相关文章
- <九度 OJ>题目1545:奇怪的连通图
题目描写叙述: 已知一个无向带权图,求最小整数k.使仅使用权值小于等于k的边,节点1能够与节点n连通. 输入: 输入包括多组測试用例.每组測试用例的开头为一个整数n(1 <= n <= 1 ...
- [Jobdu] 题目1361:翻转单词顺序
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stu ...
- [Jobdu] 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他.问题是:求出1~13的整数中1出现的次数,并算出100~130 ...
- [Jobdu] 题目1377:缓变序列
题目描述: 陈博在写论文时碰到一个难题:如何将给定的整数序列变换成缓变序列:即任意两个相邻的元素相差均为1,第1个元素和最后一个元素相差也为1. 变换是指改变原整数序列中各元素的顺序.例如整数序列1, ...
- [Jobdu] 题目1531:货币面值
题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在游戏中购买各种装备来提升自己.有一天,他突然很想知道这些纸币的组合不能表示的最小面额是多少, ...
- [Jobdu] 题目1527:首尾相连数组的最大子数组和
题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr ...
- [Jobdu] 题目1497:面积最大的全1子矩阵
题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行是 ...
- [Jobdu] 题目1506:求1+2+3+...+n
题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每 ...
- [Jobdu] 题目1283:第一个只出现一次的字符
题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字 ...
随机推荐
- 为什么好多人说win8不好用?
2012年8月就開始接触win8了,那时win8已经出来半年了:自从用了win8之后就感觉他比xp.win7桌面更绚丽.我就喜欢绚丽的桌面.至今使用win8已经两年了,可发现身边好多人都说win8不好 ...
- linux环境中设置jacoco覆盖率
cd /alidata1/admin/za-themis pkill -9 -f za-themis #CATALINA_HOME=/root/za-tomcat #CATALINA_BASE=/ro ...
- 优秀web资源
http://www.filewatcher.com 一步一步asp.net_页面静态化管理 http://www.cnblogs.com/ylwn817/articles/2006923.html ...
- uva 701 - The Archeologists' Dilemma
题目链接:uva 701 - The Archeologists' Dilemma 题目大意:给出x,求一个e,使得x * 10 ^ y ≤ 2 ^ e < (x + 1) * 10 ^ y. ...
- wepy - 使用vsCode编辑器安装插件
完成后,高亮以及智能补全代码. 1. 首先ctrl+shift+p打开扩展,安装以下三个插件 2. 复制以下文件内容到你的vsCode配置 files.associations { "fil ...
- rpx单位与移动设备分辨率
移动设备的分辨率与rpx 不是所有的单位都适合用rpx 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- Ubuntu vim+ ctags(包括系统函数) + taglist 配置
阅读大型代码,我们常常须要打开非常多的代码文件,搜索各种定义.windows下用惯了ide的朋友.转战Linux的时候可能会认为非常难受,找不到合适的阅读工具. 事实上万能的vim就能够实现. 以下介 ...
- linux下sar tool command note
linux下的sar工具简介 我习惯使用的命令是 : sar -r -f /var/log/sa/sa24 sar 既能报告当前数据,也能报告历史数据 不带选项执行会以10分钟为间隔报告自午夜 ...
- Python之zip
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之zip #http://python.jobbole.com/82590/ #1)zip语法格 ...
- 调用网易有道词典api
# -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): ...