Submission #1288083

#TimeUsernameProblemLanguageResultExecution timeMemory
1288083hoangphuc210108Sightseeing (NOI14_sightseeing)C++20
25 / 25
1758 ms205352 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define fi first
#define se second
const int MAX = 5e5 + 10;
typedef pair <int, int> ii;
typedef pair <int, ii> iii;

vector <iii> in;
vector <ii> g[MAX];

int par[MAX], sz[MAX], n, q, m;

int act(int v)
{
    if (par[v] == v) return v;

    par[v] = act(par[v]);
    return par[v];
}

bool innit(int x, int y)
{
    int a = act(x);
    int b = act(y);

    if(a == b ) return false;

    if(sz[a] < sz[b]) swap(a, b);

    par[b] = a;
    sz[a] += sz[b];
    return true;
}

bool ope(iii a, iii b)
{
return a.fi > b.fi;
}

int dist[MAX];

void dfs(int u, int par)
{
    for(auto x : g[u]){
        int v = x.fi;
        int w = x.se;
        if(v != par){
            dist[v] = min(dist[u], w);
            dfs(v, u);
        }
    }
}
signed main()
{
    ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);

    cin >> n >> m >> q;

    for(int i = 1; i <= n; i++){
        par[i] = i;
        sz[i] = 1;
    }

    for(int i = 1; i <= m; i++){
        int x, y, val; cin >> x >> y >> val;

        in.push_back({val, {x, y}});
    }

    sort(in.begin(), in.end(), ope);

    for(int i = 0; i < m; i++){
        int u = in[i].se.fi;
        int v = in[i].se.se;
        int w = in[i].fi;

        if(innit(u, v)){
            g[u].push_back({v, w});
            g[v].push_back({u, w});
        }
    }
    dist[1] = 1e9;
    dfs(1, -1);

    while(q--){
        int x; cin >> x;
        cout << dist[x] << "\n";
    }
    return 0;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...