Submission #1312770

#TimeUsernameProblemLanguageResultExecution timeMemory
1312770nguyengiabach1201Sightseeing (NOI14_sightseeing)C++20
25 / 25
1543 ms172776 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;

#define el '\n'
#define FNAME "tinhcldd"
#define ll long long
#define int long long
#define MOD (int)(1e9 + 7)
#define INF (ll)(1e18 + 1)

void setup()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    if (fopen(FNAME ".inp", "r"))
    {
        freopen(FNAME ".inp", "r", stdin);
        freopen(FNAME ".out", "w", stdout);
    }

    return;
}

const int N = 5e5 + 5;
int n, m, q;
int p[N], ans[N], parent_dsu[N];

struct Edge {
    int u, v, w;
};

bool cmp(const Edge &a, const Edge &b) {
    return a.w > b.w;
}

int find_set(int v) {
    if (v == parent_dsu[v]) return v;
    return parent_dsu[v] = find_set(parent_dsu[v]);
}

vector<pair<int, int>> mst_adj[N];

void dfs(int u, int p, int min_w) {
    ans[u] = min_w;
    for (auto &edge : mst_adj[u]) {
        int v = edge.first;
        int w = edge.second;
        if (v != p) {
            dfs(v, u, min(min_w, w));
        }
    }
}

void solve()
{
    cin >> n >> m >> q;

    vector<Edge> edges(m);
    for (int i = 0; i < m; ++i) {
        cin >> edges[i].u >> edges[i].v >> edges[i].w;
    }

    sort(edges.begin(), edges.end(), cmp);

    for (int i = 1; i <= n; ++i) {
        parent_dsu[i] = i;
        ans[i] = -INF;
    }

    int count = 0;
    for (int i = 0; i < m; ++i) {
        int u = find_set(edges[i].u);
        int v = find_set(edges[i].v);
        if (u != v) {
            parent_dsu[u] = v;
            mst_adj[edges[i].u].push_back({edges[i].v, edges[i].w});
            mst_adj[edges[i].v].push_back({edges[i].u, edges[i].w});
            count++;
            if (count == n - 1) break;
        }
    }

    for (int i = 1; i <= q; ++i) cin >> p[i];

    dfs(1, 0, INF);

    for (int i = 1; i <= q; ++i) {
        if (ans[p[i]] == -INF) cout << -1 << el;
        else cout << ans[p[i]] << el;
    }
}

signed main()
{
    setup();
    solve();
    return 0;
}

Compilation message (stderr)

sightseeing.cpp: In function 'void setup()':
sightseeing.cpp:21:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         freopen(FNAME ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
sightseeing.cpp:22:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |         freopen(FNAME ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...