Hướng giải của DSU offline — Xoá cạnh
Nộp mã nguồn lời giải chính thức trước khi giải bài tập đó có thể khiến bạn bị ban.
Tác giả:
```cpp
include <bits/stdc++.h>
using namespace std;
struct DSU {
vector
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, q; cin >> n >> m >> q; set<pair<int,int>> edges; vector<pair<int,int>> el; for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; if (u > v) swap(u, v); edges.insert({u, v}); el.push_back({u, v}); } vector<tuple<int,int,int>> qs; for (int i = 0; i < q; i++) { int t, u, v; cin >> t >> u >> v; qs.push_back({t, u, v}); if (t == 1) { if (u > v) swap(u, v); edges.erase({u, v}); } } DSU dsu(n); for (auto& [u, v] : edges) dsu.unite(u, v); vector<string> ans; for (int i = q - 1; i >= 0; i--) { auto [t, u, v] = qs[i]; if (t == 1) { if (u > v) swap(u, v); dsu.unite(u, v); } else ans.push_back(dsu.find(u) == dsu.find(v) ? "YES" : "NO"); } reverse(ans.begin(), ans.end()); for (auto& s : ans) cout << s << '\n'; return 0; }
Nhận xét