제출 #124601

#제출 시각아이디문제언어결과실행 시간메모리
124601MoNsTeR_CuBe관광 (NOI14_sightseeing)C++17
15 / 25
3545 ms110992 KiB
#include <bits/stdc++.h> using namespace std; const int INF = numeric_limits<int>::max(); vector< int > dist; vector< int > U; vector< int > taille; int getParents(int a){ if(U[a] == a) return a; else return U[a] = getParents(U[a]); } void Union(int a, int b){ a = getParents(a); b = getParents(b); if(taille[a] < taille[b]){ taille[a] += taille[b]; U[a] = U[b]; }else{ taille[b] += taille[a]; U[b] = U[a]; } } vector< vector< pair<int, int> > > Graph; vector< bool > visited; void dfs(int node, int cost){ dist[node] = cost; visited[node] = true; for(pair<int, int> p : Graph[node]){ if(visited[p.first]) continue; dfs(p.first, min(cost, p.second)); } } signed main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m, q; cin >> n >> m >> q; Graph.resize(n+1); vector< tuple<int, int, int> > edges; for(int i = 0; i < m; i++){ int a, b, c; cin >> a >> b >> c; edges.push_back(make_tuple(c,a,b)); } taille.assign(n+1,1); dist.resize(n+1); U.resize(n+1); for(int i = 0; i <= n; i++){ U[i] = i; } sort(edges.begin(), edges.end(), greater< tuple<int, int, int> >()); for(int i = 0; i < m; i++){ int a = get<1>(edges[i]); int b = get<2>(edges[i]); int c = get<0>(edges[i]); if(getParents(a) == getParents(b)){ continue; } Union(a,b); Graph[a].push_back(make_pair(b,c)); Graph[b].push_back(make_pair(a,c)); } visited.assign(n+1, false); dfs(1,INF); for(int i = 0; i < q; i++){ int a; cin >> a; cout << dist[a] << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...