Task: | Budgetting bridges |
Sender: | Tyämiesklubi |
Submission time: | 2024-11-16 16:22:35 +0200 |
Language: | C++ (C++20) |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.00 s | details |
#2 | ACCEPTED | 0.00 s | details |
#3 | ACCEPTED | 0.00 s | details |
#4 | ACCEPTED | 0.00 s | details |
#5 | ACCEPTED | 0.00 s | details |
#6 | ACCEPTED | 0.23 s | details |
#7 | ACCEPTED | 0.29 s | details |
#8 | ACCEPTED | 0.29 s | details |
#9 | ACCEPTED | 0.23 s | details |
#10 | ACCEPTED | 0.32 s | details |
#11 | ACCEPTED | 0.51 s | details |
Code
#include <bits/stdc++.h>using namespace std;struct E {int u, v;long c;};const int N = 1e5+1;int dsu_p[N], dsu_s[N];int dsu_get(int x) {while (dsu_p[x] != x) x = dsu_p[x];return x;}struct U {int a, b, p, s;};U dsu_j(int a, int b) {a = dsu_get(a);b = dsu_get(b);if (a == b) return {0, 0, 0, 0};// b -> aif (dsu_s[b] > dsu_s[a]) swap(a, b);U r{a, b, dsu_p[b], dsu_s[a]};dsu_p[b] = a;dsu_s[a] += dsu_s[b];return r;}void do_u(U x) {if (x.a == 0) return;dsu_p[x.b] = x.p;dsu_s[x.a] = x.s;}int main() {ios::sync_with_stdio(0);cin.tie(0);int n, m, k;cin >> n >> m >> k;for (int i = 1; i <= n; ++i) dsu_p[i] = i, dsu_s[i] = 1;E e[m];int ord[m];map<pair<int, int>, int> vtoi;for (int i = 0; i < m; ++i) {ord[i] = i;cin >> e[i].u >> e[i].v >> e[i].c;vtoi[{e[i].u, e[i].v}] = i;}sort(ord, ord+m, [&](int a, int b) {return e[a].c < e[b].c;});map<long, map<int, vector<int>>> ctoe;bool ans[k];for (int i = 0; i < k; ++i) {ans[i] = 1;int b;cin >> b;for (int j = 0; j < b; ++j) {int u, v;cin >> u >> v;int ei = vtoi[{u, v}];long c = e[ei].c;ctoe[c][i].push_back(ei);}}for (int ei = 0; ei < m; ) {long cc = e[ord[ei]].c;for (const auto& [pi, es] : ctoe[cc]) {vector<U> undos;for (int pei : es) {int a = dsu_get(e[pei].u), b = dsu_get(e[pei].v);if (a == b) {ans[pi] = false;break;}undos.push_back(dsu_j(a, b));}for (auto& x : undos) do_u(x);}for (; ei < m && e[ord[ei]].c == cc; ++ei) {int a = dsu_get(e[ord[ei]].u), b = dsu_get(e[ord[ei]].v);dsu_j(a, b);}}for (int i = 0; i < k; ++i) {if (ans[i]) cout << "YES\n";else cout << "NO\n";}}
Test details
Test 1
Verdict: ACCEPTED
input |
---|
3 3 2 1 2 1 1 3 1 2 3 2 1 ... |
correct output |
---|
YES NO |
user output |
---|
YES NO |
Test 2
Verdict: ACCEPTED
input |
---|
3 3 2 1 2 1 1 3 1 2 3 1 3 ... |
correct output |
---|
NO YES |
user output |
---|
NO YES |
Test 3
Verdict: ACCEPTED
input |
---|
10 20 10 5 10 1 10 1 1 4 10 1 3 1 1 ... |
correct output |
---|
YES YES YES YES YES ... |
user output |
---|
YES YES YES YES YES ... |
Test 4
Verdict: ACCEPTED
input |
---|
10 20 10 5 2 1 10 6 3 5 4 1 2 3 3 ... |
correct output |
---|
NO NO YES NO NO ... |
user output |
---|
NO NO YES NO NO ... |
Test 5
Verdict: ACCEPTED
input |
---|
10 20 10 6 1 3 9 3 1 9 5 4 1 2 1 ... |
correct output |
---|
YES YES NO NO NO ... |
user output |
---|
YES YES NO NO NO ... |
Test 6
Verdict: ACCEPTED
input |
---|
100000 200000 50 96703 90063 1 17270 97269 1 71482 60904 1 59756 21609 1 ... |
correct output |
---|
YES YES YES YES YES ... |
user output |
---|
YES YES YES YES YES ... |
Test 7
Verdict: ACCEPTED
input |
---|
100000 200000 30000 22200 5519 1 83133 20672 1 91862 97945 1 8983 61175 1 ... |
correct output |
---|
YES YES YES YES YES ... |
user output |
---|
YES YES YES YES YES ... |
Test 8
Verdict: ACCEPTED
input |
---|
100000 200000 5000 22200 5519 9 83133 20672 4 91862 97945 5 8983 61175 4 ... |
correct output |
---|
NO NO NO NO NO ... |
user output |
---|
NO NO NO NO NO ... |
Test 9
Verdict: ACCEPTED
input |
---|
100000 200000 5000 22200 5519 9 83133 20672 4 91862 97945 5 8983 61175 4 ... |
correct output |
---|
YES NO NO YES YES ... |
user output |
---|
YES NO NO YES YES ... |
Test 10
Verdict: ACCEPTED
input |
---|
100000 200000 2000 22200 5519 870732304 83133 20672 363736896 91862 97945 488411190 8983 61175 396736607 ... |
correct output |
---|
NO NO NO NO NO ... |
user output |
---|
NO NO NO NO NO ... |
Test 11
Verdict: ACCEPTED
input |
---|
100000 200000 60000 22200 5519 9 83133 20672 4 91862 97945 5 8983 61175 4 ... |
correct output |
---|
NO NO YES NO NO ... |
user output |
---|
NO NO YES NO NO ... |