# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
39369 | 2018-01-13T02:04:12 Z | MatheusLealV | 관광 (NOI14_sightseeing) | C++14 | 2399 ms | 93428 KB |
#include <bits/stdc++.h> #define f first #define s second #define N 500500 using namespace std; typedef pair<int, int> pii; int n, m, q, pai[N], peso[N], ans[N]; vector<pii> grafo[N]; vector< pair<int, pii> > A; int Find(int x) { if(x == pai[x]) return x; return pai[x] = Find(pai[x]); } void join(int a, int b) { if(peso[a] >= peso[b]) swap(a, b); pai[a] = b; if(peso[a] == peso[b]) peso[b] ++; } void getans() { memset(ans, 0x3f3f3f3f, sizeof ans); queue<pii> fila; fila.push(pii(1, 1)); while(!fila.empty()) { int x = fila.front().f, p = fila.front().s; fila.pop(); for(auto v: grafo[x]) { if(v.f == p) continue; ans[v.f] = min(ans[x], v.s); fila.push(pii(v.f, x)); } } } int main() { //ios::sync_with_stdio(false); cin.tie(0); scanf("%d %d %d", &n, &m, &q); for(int i = 1, a, b, c; i <= m; i++) { scanf("%d %d %d", &a, &b, &c); A.push_back(make_pair(c, pii(a, b))); } sort(A.rbegin(), A.rend()); for(int i = 1; i <= n; i++) pai[i] = i; for(auto p: A) { int a = Find(p.s.f), b = Find(p.s.s); if(a == b) continue; join(a, b); grafo[a].push_back(pii(b, p.f)); grafo[b].push_back(pii(a, p.f)); } getans(); while(q--) { int x; scanf("%d", &x);; printf("%d\n", ans[x]); } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 19616 KB | Output is correct |
2 | Correct | 0 ms | 19616 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 19788 KB | Output is correct |
2 | Correct | 0 ms | 19616 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 39 ms | 21968 KB | Output is correct |
2 | Correct | 43 ms | 21812 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2399 ms | 93428 KB | Output is correct |
2 | Runtime error | 0 ms | 0 KB | -1: Interrupted system call |