题目名称 1109. [福州培训2010] 修复公路
输入输出 roada.in/out
难度等级 ★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 GravatarMakazeu 于2012-10-07加入
开放分组 全部用户
提交状态
分类标签
图论 最小生成树 并查集
分享题解
通过:174, 提交:401, 通过率:43.39%
Gravatar+1s 100 0.067 s 0.72 MiB C++
GravatarL_in 100 0.101 s 2.62 MiB C++
GravatarArrow 100 0.113 s 7.42 MiB C++
Gravatarsyzhaoss 100 0.121 s 2.77 MiB C++
Gravatar┭┮﹏┭┮ 100 0.125 s 3.44 MiB C++
Gravatar_Itachi 100 0.133 s 1.46 MiB C++
GravatarPine 100 0.135 s 0.92 MiB C++
Gravatar锝镆氪锂铽 100 0.137 s 7.40 MiB C++
GravatarESAzl 100 0.138 s 3.36 MiB C++
Gravatar+1s 100 0.139 s 1.44 MiB C++
本题关联比赛
暑期小训练题
关于 修复公路 的近10条评论(全部评论)
把路按时间排序,加权size[i]表示 i 所属的并查集的个数 按顺序依次合并每条路 每次合并完判断当前并查集的size是否达到n
Gravatartat
2021-03-19 21:08 17楼
GravatarRichard
2019-07-03 11:54 16楼
GravatarHale
2018-11-21 18:04 15楼
十五分钟搞定,复习kruscal
GravatarHale
2018-10-24 13:34 14楼
prim也能过的说!!!
Gravatarサイタマ
2017-11-13 15:38 13楼
并查集的基础练习
GravatarWHZ0325
2017-09-29 15:16 12楼
看错题。。
GravatarO(1)
2016-11-08 12:55 11楼
最小生成树的最大边一定是所有生成树中最小的。
因为kruskal算法保证在取到这条边之前构不成生成树
Gravatardateri
2016-08-15 22:56 10楼
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000;
struct Node{
int from,to,cost;
}a[100001];
bool comp(const Node &a,const Node &b){
return a.cost<b.cost;
}
int n,m,root[1001];
void Kruskal();
int Findroot(int);
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;cin>>x>>y>>z;
a[i].from=x;a[i].to=t;a[i].cost=z;
}
Kruskal();
return 0;
}
void Kruskal(){
int ans=0,cnt=0;
for(int i=1;i<=n;i++){
root[i]=i;
}
sort(a+1,a+m+1,comp);
for(int i=1;i<=m;i++){
int x=a[i].from,y=a[i].to;
int rx=Findroot(x),ry=Findroot(y);
if(rx==ry) continue;
else{
root[rx]=ry;cnt++;
if(a[i].cost>ans) ans=a[i].cost;
}
if(cnt==n-1) break;
}
if
}
int Findroot(int x){
if(x!=root[x]){
root[x]=Findroot(root[x]);
}
return root[x];
}
GravatarHzoi_Yniverse
2016-02-26 11:11 9楼
用Kruskal求最小生成树即可
Gravatar水墨青花
2016-02-20 12:07 8楼

1109. [福州培训2010] 修复公路

★☆   输入文件:roada.in   输出文件:roada.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】

A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。

给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)

【输入格式】

第1行两个正整数N,M(N<=1000,M<=100000)

下面M行,每行3个正整数x, y, t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。(x<=N,y<=N,t<=100000)

【输出格式】

如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1,否则输出最早什么时候任意两个村庄能够通车。

【样例输入】

4 4
1 2 6
1 3 4
1 4 5
4 2 3

【样例输出】

5

【来源】

福州NOIP2010培训 Day5