# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1091633 | 2024-09-21T15:57:39 Z | raphaelp | 관광 (NOI14_sightseeing) | C++14 | 3500 ms | 213648 KB |
#include <bits/stdc++.h> using namespace std; vector<int> p; int find(int x) { return (p[x] == x) ? x : p[x] = find(p[x]); } int main() { int N, M, Q; cin >> N >> M >> Q; vector<vector<pair<int, int>>> buckets(1000010); for (int i = 0; i < M; i++) { int a, b, c; cin >> a >> b >> c; a--, b--; buckets[c].push_back({a, b}); } p.assign(N, 0); for (int i = 0; i < N; i++) p[i] = i; vector<int> dist(N); vector<vector<int>> contains(N); for (int i = 0; i < N; i++) contains[i].push_back(i); for (int i = 100000; i >= 0; i--) { for (int j = 0; j < buckets[i].size(); j++) { int x = find(buckets[i][j].first), y = find(buckets[i][j].second); if (x == y) continue; if (contains[x].size() > contains[y].size()) swap(x, y); if (find(0) == x) swap(x, y); p[x] = y; for (auto val : contains[x]) { if (y == find(0)) dist[val] = i; contains[y].push_back(val); } } } for (int i = 0; i < Q; i++) { int x; cin >> x; cout << dist[x - 1] << '\n'; } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 11 ms | 23896 KB | Output is correct |
2 | Correct | 10 ms | 23900 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 13 ms | 23896 KB | Output is correct |
2 | Correct | 12 ms | 23900 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 55 ms | 28764 KB | Output is correct |
2 | Correct | 48 ms | 28244 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2221 ms | 144720 KB | Output is correct |
2 | Execution timed out | 3549 ms | 213648 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |