试题编号: | 201703-4 |
试题名称: | 地铁修建 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁。 输入格式 输入的第一行包含两个整数n, m,用一个空格分隔,分别表示交通枢纽的数量和候选隧道的数量。 输出格式 输出一个整数,修建整条地铁线路最少需要的天数。 样例输入 6 6 样例输出 6 样例说明 可以修建的线路有两种。 评测用例规模与约定 对于20%的评测用例,1 ≤ n ≤ 10,1 ≤ m ≤ 20; |
#include<bits/stdc++.h>
using namespace std;
struct Edge{
int u,v,cost;
Edge(int uu,int vv,int c):u(uu),v(vv),cost(c){}
bool operator < (const Edge&e) const{
return this->cost > e.cost;
}
};
priority_queue<Edge>edges;
int father[100005];
int findFather(int x){
if(father[x]==x)
return x;
int tmp=findFather(father[x]);
father[x]=tmp;
return tmp;
}
int main(){
int n,m,ans=0;
cin>>n>>m;
iota(father,father+n+1,0);
while(m--){
int a,b,c;
cin>>a>>b>>c;
edges.push(Edge(a,b,c));
}
while(findFather(1)!=findFather(n)){
Edge e=edges.top();
edges.pop();
int u=findFather(e.u),v=findFather(e.v);
if(u!=v){
father[u]=v;
ans=max(ans,e.cost);
}
}
cout<<ans<<endl;
return 0;
}