Submission #1299018

#TimeUsernameProblemLanguageResultExecution timeMemory
1299018efegJoker (BOI20_joker)C++20
0 / 100
181 ms10392 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define eb emplace_back #define F first #define S second typedef pair<int,int> ii; template<typename T> using vec = vector<T>; using i64 = long long; struct DSU{ int n; vec<int> dsu,dist; DSU(int n) : n(n){ dsu.assign(n,-1); dist.assign(n,0); } int find(int x){ if (dsu[x] < 0) return x; int old = dsu[x]; dsu[x] = find(dsu[x]); dist[x] = (dist[x] + dist[old]) & 1; return dsu[x]; } bool merge(int x,int y){ int px = find(x); int py = find(y); if (px == py) { if (dist[x] == dist[y]){ return false; } return true; } if (dsu[px] > dsu[py]) swap(px,py); dsu[px] += dsu[py]; dsu[py] = px; dist[py] = 1; return true; } }; int n,m,q; vec<ii> edges; vec<vec<ii>> queries; vec<bool> ans; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> n >> m >> q; ans.assign(q + 1,false); queries.assign(m,vec<ii>()); for (int i = 0; i < m; i++){ int a,b; cin >> a >> b; a--; b--; edges.eb(a,b); } for (int i = 0; i < q; i++){ int l,r; cin >> l >> r; l--; r--; queries[l].eb(r,i); } for (int l = 0; l < m; l++){ if (!queries[l].empty()){ DSU dsu(n+1); bool ok = false; for (int i = 0; i < l; i++){ if (!dsu.merge(edges[i].F,edges[i].S)) ok = true; } int idx = m-1; while (!ok && idx >= l){ if (!dsu.merge(edges[idx].F,edges[idx].S)) ok = true; idx--; } for (auto tp : queries[l]){ int r,i; tie(r,i) = tp; if (r <= idx) ans[i] = true; else ans[i] = false; } } } for (int i = 0; i < q; i++) cout << (ans[i] ? "YES" : "NO") << endl; 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...