Submission #1177339

#TimeUsernameProblemLanguageResultExecution timeMemory
1177339bohun.iSightseeing (NOI14_sightseeing)C++20
25 / 25
1454 ms209328 KiB
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC target("avx,avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;

long long d[500500], p[500500], sz[500500];
long long find(long long x) {
    if (x==p[x])return x;
    return p[x]=find(p[x]);
}

void unite(long long x, long long y) {
    x=find(x);
    y=find(y);
    if (x != y) {
        if (sz[x]<sz[y])swap(x,y);
        p[y]=x;
        sz[x]+=sz[y];
    }
}

    vector<pair<long long, long long> >  v1[500500];
void dfs(long long x, long long pr, long long w) {
    d[x]=w;
    for (long long i=0;i<v1[x].size();i++) {
        if (v1[x][i].first!=pr) {
            dfs(v1[x][i].first, x, min(w, v1[x][i].second));
        }
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    long long n, m, q, w, e, k;
    cin >> n >> m >> q;
    vector<pair<long long, pair<long long, long long> > > v;
    for (long long i=0;i<m; i++) {
        cin >> w >> e >> k;
        v.push_back({k, {e, w}});
    }
    for (long long i = 1; i <= n; i++) {
        d[i] = 0;
        sz[i]=1;
        p[i]=i;
    }
    d[0]=10000000000000;
    sort(v.rbegin(), v.rend());
    for (long long i = 0; i < v.size(); i++) {
        if (sz[p[1]]==n)break;
        if (find(v[i].second.second) != find(v[i].second.first)) {
            v1[v[i].second.second].push_back({v[i].second.first, v[i].first});
            v1[v[i].second.first].push_back({v[i].second.second, v[i].first});
       // cout<<"@";
        unite(v[i].second.first, v[i].second.second);
        }
    }
    dfs(1, -1, 1000000000000);
    for (long long i = 1; i <= q; i++) {
        cin>>k;
        cout<<d[k]<<"\n";
    }
    //cout <<"Q"<< endl;
    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...