Submission #726706

#TimeUsernameProblemLanguageResultExecution timeMemory
726706JohannJoker (BOI20_joker)C++14
49 / 100
2053 ms28660 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<pii> vpii; typedef vector<vpii> vvpii; #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() int N, M, Q; vvpii adj; vpii E; struct DSU { vi arr; vi color; vi cxorp; // xor with color of parent? bool oddCycle; void init() { oddCycle = false, arr.resize(N); iota(all(arr), 0); color.assign(N, 0), cxorp.assign(N, 0); } int find(int i) { if (arr[i] == i) return i; int p = arr[i]; arr[i] = find(p); color[i] = color[p] ^ cxorp[i]; cxorp[i] = cxorp[i] ^ cxorp[p]; return arr[i]; } bool join(int a, int b) { int pa = find(a), pb = find(b); // get color to newest bool sameColor = (color[a] == color[b]); if (pa == pb) { oddCycle = oddCycle || sameColor; return sameColor; } arr[pb] = pa; if (sameColor) { cxorp[pb] = 1; color[pb] = color[pa] ^ cxorp[pb]; } return false; } }; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N >> M >> Q; adj.resize(N); E.resize(M); for (int i = 0, a, b; i < M; ++i) { cin >> a >> b; --a, --b; adj[a].push_back({b, i}), adj[b].push_back({a, i}); E[i] = {min(a, b), max(a, b)}; } vvpii Queries(M + 1); vi ans(Q); for (int i = 0, l, r; i < Q; ++i) { cin >> l >> r; --l, --r; // [l, r] inclusive is blocked l = min(M, l), r = min(M, r); Queries[l].push_back({r, i}); } DSU dsu; for (int l = 0; l < sz(Queries); ++l) { if (Queries[l].empty()) continue; dsu.init(); for (int i = 0; i < l; ++i) dsu.join(E[i].first, E[i].second); int r = M - 1; while (!dsu.oddCycle && r >= l) { dsu.join(E[r].first, E[r].second); --r; } for (pii q : Queries[l]) ans[q.second] = (q.first <= r); } for (int a : ans) if (a) cout << "YES\n"; else cout << "NO\n"; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...