Submission #1159932

#TimeUsernameProblemLanguageResultExecution timeMemory
1159932rewqewDrivers (BOI24_drivers)C++17
0 / 100
2 ms2116 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 r = 0; for (int i = 0; i < u; i++) { if (r < m) { while (roads[r][0] <= qu[i][0]) { Union(roads[r][1], roads[r][2]); r++; if (r >= m) { break; } } } if (Find(qu[i][1]) == Find(qu[i][2])) { ans[qu[i][3]] = true; } } for (int i = 0; i < u; i++) { if (ans[i]) { std::cout << "TAIP\n"; } else { std::cout << "NE\n"; } } } /* 7 7 7 4 5 1 4 7 1 3 4 2 1 3 3 5 6 3 1 7 5 2 3 7 1 7 5 2 4 9 6 7 3 3 5 10 2 6 5 5 6 8 1 6 10 */
#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...