Submission #1144583

#TimeUsernameProblemLanguageResultExecution timeMemory
1144583keaucucalDrivers (BOI24_drivers)C++20
100 / 100
231 ms7432 KiB
#include <iostream> #include <vector> #include <utility> #include <algorithm> #include <numeric> using namespace std; struct DSU { vector<int> boss; DSU(int n) : boss(n + 1) { for (int i = 1; i <= n; i++) { boss[i] = i; } } int find(int x) { if (boss[x] == x) return x; return boss[x] = find(boss[x]); } void join(int a, int b) { a = find(a), b = find(b); boss[a] = b; } bool same(int a, int b) { return find(a) == find(b); } }; int main() { int n, m, u; cin >> n >> m >> u; vector<pair<int, pair<int, int>>> adj(m), req(u); for (int i = 0; i < m; i++) { int x, y, t; cin >> x >> y >> t; adj[i] = make_pair(t, make_pair(x, y)); } sort(adj.begin(), adj.end()); for (int i = 0; i < u; i++) { int a, b, p; cin >> a >> b >> p; req[i] = make_pair(p, make_pair(a, b)); } vector<int> ind(u); iota(ind.begin(), ind.end(), 0); sort(ind.begin(), ind.end(), [&](int a, int b) { return req[a].first < req[b].first; }); vector<bool> ans(u); int cur = 0; DSU dsu(n); for (int i = 0; i < u; i++) { int p = req[ind[i]].first; while (cur < m && adj[cur].first <= p) { dsu.join(adj[cur].second.first, adj[cur].second.second); cur++; } ans[ind[i]] = dsu.same(req[ind[i]].second.first, req[ind[i]].second.second); // or false } for (int i = 0; i < u; i++) { cout << (ans[i] ? "TAIP" : "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...