问题标题: 酷町堂:4770 南海群岛

0
0
已解决
张睿杰
张睿杰
高级守护
高级守护

4770   南海群岛

题目描述 Description

2200年,科技高速发展,政府决定在南海修一批跨海大桥把各个岛屿连接起来。
现给出南海的岛屿数N,和准备修建的跨海大桥数。并告诉你每个大桥连接着哪两个岛屿,并告诉你什么时候修完这个大桥。问最早什么时候任意两个岛屿之间都能联通,即最早什么时候任意两个岛屿都存在至少一个修建完成的跨海大桥(可以由多个跨海大桥连成一条道路)

输入描述 Input Description

第1行两个正整数N,M
下面M行,每行3个正整数x, y, t告诉你这个跨海大桥连着x,y两个岛屿,在时间t时能修建完成这个跨海大桥。

输出描述 Output Description

如果全部跨海大桥修建完毕仍然存在两个岛屿无法通车,则输出-1,否则输出最早什么时候任意两个岛屿能够通车。

样例输入 Sample Input

 

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

样例输出 Sample Output

 

5

数据范围及提示 Data Size & Hint

N≤1000,M≤100000
x≤N,y≤N,t≤100000

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,m;
vector<int> g[100010]; 
struct node{
    int x,y,t;
}a[100010];
bool cmp(const node& s1, const node& s2)
{
    return s1.t<s2.t;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++) cin>>a[i].x>>a[i].y>>a[i].t;
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=m;i++) {
        g[a[i].x].push_back(a[i].y);
        for(int j=0;j<g[a[i].y].size();j++)
            g[a[i].x].push_back(g[a[i].y][j]);
        g[a[i].y].push_back(a[i].x);
        for(int j=0;j<g[a[i].x].size();j++)
            g[a[i].y].push_back(g[a[i].x][j]);
        if(g[1].size()==n-1) {
            cout<<a[i].t;
            return 0;
        }
    }
    cout<<-1<<endl;
    return 0;
}

不知道怎么回事,Runtime Error:0分 了,求各位大佬出山帮忙


0
已采纳
邓涵睿
邓涵睿
中级天翼
中级天翼

这道题,我不会

but:N≤1000,M≤100000
x≤N,y≤N,t≤100000这个很重要。sort内些你都会。对了,你能采纳我上一个问题吗,蟹蟹

0
董宇昊
董宇昊
初级启示者
初级启示者

现在,大佬们都退休了,没有人会你这题~

0
被禁言 何冯成
何冯成
中级光能
中级光能

这不要用vector吧

何冯成在2020-05-06 12:48:27追加了内容

map

 

我要回答