Submission #218228

#TimeUsernameProblemLanguageResultExecution timeMemory
218228quocnguyen1012Sightseeing (NOI14_sightseeing)C++14
25 / 25
2658 ms199032 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef pair<int, int> ii; const int maxn = 5e5 + 5; int N, M, Q; int lab[maxn]; vector<ii> adj[maxn]; int path[maxn]; void init(int n) { fill_n(&lab[0], n + 1, -1); } int finds(int u) { if(lab[u] < 0) return u; return lab[u] = finds(lab[u]); } bool merges(int u, int v) { u = finds(u); v = finds(v); if(u == v) return false; if(lab[v] < lab[u]) swap(u, v); lab[u] += lab[v]; lab[v] = u; return true; } void dfs(int u, int p = -1) { for(auto & v : adj[u]) if(v.fi != p){ path[v.fi] = min(v.se, path[u]); dfs(v.fi, u); } } signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); #endif // LOCAL cin >> N >> M >> Q; init(N); vector<pair<int, ii>> edge(M); for(auto & it : edge){ cin >> it.se.fi >> it.se.se >> it.fi; } sort(edge.rbegin(), edge.rend()); for(auto & it : edge){ if(merges(it.se.fi, it.se.se)){ //cerr << it.se.fi << ' ' << it.se.se << ' ' << it.fi << '\n'; adj[it.se.fi].eb(it.se.se, it.fi); adj[it.se.se].eb(it.se.fi, it.fi); } } path[1] = 1e9; dfs(1); while(Q--){ int x; cin >> x; cout << path[x] << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...