Submission #726677

#TimeUsernameProblemLanguageResultExecution timeMemory
726677JohannJoker (BOI20_joker)C++14
39 / 100
2058 ms39224 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; vvi contains; bool oddCycle; void init() { oddCycle = false; arr.resize(N); iota(all(arr), 0); color.assign(N, 0); contains.resize(N); for (int i = 0; i < N; ++i) contains[i].clear(), contains[i].push_back(i); } int find(int i) { return arr[i] = (arr[i] == i) ? i : find(arr[i]); } bool join(int a, int b) { bool sameColor = (color[a] == color[b]); a = find(a), b = find(b); if (a == b) { oddCycle = oddCycle || sameColor; return sameColor; } if (sz(contains[a]) < sz(contains[b])) swap(a, b); arr[b] = a; while (!contains[b].empty()) { int u = contains[b].back(); contains[b].pop_back(); contains[a].push_back(u); if (sameColor) color[u] = !color[u]; } 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...