# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
103443 | 2019-03-30T17:53:56 Z | SecretAgent007 | 관광 (NOI14_sightseeing) | C++17 | 3117 ms | 100376 KB |
#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(){ 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; scanf("%d%d%d",&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; scanf("%d", &a); cout << dist[a] << '\n'; } } /* 4 4 2 1 2 10 1 3 30 2 4 20 3 4 5 3 4 */
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 384 KB | Output is correct |
2 | Correct | 3 ms | 384 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 4 ms | 384 KB | Output is correct |
2 | Correct | 3 ms | 384 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 47 ms | 3300 KB | Output is correct |
2 | Correct | 38 ms | 3064 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2248 ms | 61996 KB | Output is correct |
2 | Correct | 3117 ms | 100376 KB | Output is correct |