Submission #1159926

#TimeUsernameProblemLanguageResultExecution timeMemory
1159926rewqewDrivers (BOI24_drivers)C++17
0 / 100
2 ms2120 KiB
#include <iostream> #include <vector> #include <queue> #include <algorithm> int pa[200005], sz[200005]; int Find(int a) { if (a == pa[a]) { return a; } pa[a] = pa[pa[a]]; return pa[a]; } bool Union(int a, int b) { a = Find(a); b = Find(b); if (a == b) { return false; } if (a < b) { std::swap(a, b); } pa[b] = a; sz[a] += sz[b]; return true; } int main() { for (int i = 0; i < 200005; i++) { pa[i] = i; sz[i] = 1; } int n, m, u; std::cin >> n >> m >> u; std::vector<std::vector<int>> roads; for (int i = 0; i < m; i++) { int a, b, t; std::cin >> a >> b >> t; roads.push_back({t, a, b}); } std::sort(roads.begin(), roads.end()); std::vector<std::vector<int>> qu; std::vector<bool> ans(u, false); for (int i = 0; i < u; i++) { int a, b, p; std::cin >> a >> b >> p; qu.push_back({p, a, b, i}); } std::sort(qu.begin(), qu.end()); int qp = 0; for (int i = 0; i < m; i++) { if (qp < u) { while (qu[qp][0] < roads[i][0]) { if (Find(qu[qp][1]) == Find(qu[qp][2])) { ans[qu[qp][3]] = true; } qp++; if (qp >= u) { break; } } } Union(roads[i][1], roads[i][2]); } while (qp < u) { if (Find(qu[qp][1]) == Find(qu[qp][2]) && qu[qp][0] >= roads[m-1][0]) { ans[qu[qp][3]] = true; } qp++; } for (int i = 0; i < u; i++) { if (ans[i]) { std::cout << "TAIP\n"; } else { std::cout << "NE\n"; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...