# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
124604 | 2019-07-03T14:56:00 Z | MoNsTeR_CuBe | 관광 (NOI14_sightseeing) | C++17 | 3171 ms | 100984 KB |
#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(){ int n, m, q; scanf("%d%d%d", &n, &m, &q); Graph.resize(n+1); vector< tuple<int, int, int> > edges(m); for(int i = 0; i < m; i++){ int a, b, c; scanf("%d%d%d", &a, &b, &c); edges[i] = make_tuple(c,a,b); } taille.assign(n+1,1); dist.resize(n+1); U.resize(n+1); for(int i = 1; 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; scanf("%d", &a); printf("%d\n", dist[a]); } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 380 KB | Output is correct |
2 | Correct | 2 ms | 276 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 376 KB | Output is correct |
2 | Correct | 2 ms | 376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 44 ms | 3548 KB | Output is correct |
2 | Correct | 40 ms | 3188 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2214 ms | 63488 KB | Output is correct |
2 | Correct | 3171 ms | 100984 KB | Output is correct |