Submission #103442

#TimeUsernameProblemLanguageResultExecution timeMemory
103442SecretAgent007Sightseeing (NOI14_sightseeing)C++17
25 / 25
2610 ms110076 KiB
#include <bits/stdc++.h> using namespace std; #define double long double const int INF = INT_MAX; vector< vector< pair< int, int > > > Graph; vector< int > U; vector< int > dist; int getParents(int a){ if(U[a] == a) return a; else return U[a] = getParents(U[a]); } void Union(int a, int b){ U[getParents(a)] = getParents(b); } void dfs(int node, int last){ for(auto a : Graph[node]){ if(a.first == last) continue; dist[a.first] = min(a.second, dist[node]); dfs(a.first, node); } } signed main(){ ios::sync_with_stdio(false); cin.tie(0); int v, e, q; cin >> v >> e >> q; Graph.resize(v+1); U.resize(v+1); dist.resize(v+1, INF); vector< tuple<int, int, int> > ve(e); for(int i = 0; i <= v; i++) U[i] = i; for(int i = 0; i < e ; i++){ int a, b, c; cin >> a >> b >> c; ve[i] = make_tuple(c,a,b); } sort(ve.begin(), ve.end(), greater<tuple<int, int, int> >()); for(int i = 0; i < e; i++){ auto tup = ve[i]; int c = get<0>(tup); int a = get<1>(tup); int b = get<2>(tup); if(getParents(a) == getParents(b)) continue; else{ Union(a,b); Graph[a].push_back(make_pair(b,c)); Graph[b].push_back(make_pair(a,c)); } } dfs(1,-1); while(q--){ int a; cin >> a; cout << dist[a] << '\n'; } } /* 4 4 2 1 2 10 1 3 30 2 4 20 3 4 5 3 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...