제출 #1161883

#제출 시각아이디문제언어결과실행 시간메모리
116188312345678Joker (BOI20_joker)C++20
0 / 100
894 ms31364 KiB
#include <bits/stdc++.h> using namespace std; const int nx=2e5+5; int n, m, q, u[nx], v[nx], c[nx], f, sz, dsu[nx], dp[nx], a, b; vector<pair<int, int>> d[nx]; vector<int> g[nx]; int find(int x) { if (dsu[x]==x) return x; return dsu[x]=find(dsu[x]); } void dfs(int u, int p, int hd, int l, int r) { //cout<<"dfs "<<u<<' '<<hd<<' '<<l<<' '<<r<<'\n'; g[hd].push_back(u); dsu[u]=hd; for (auto [v, idx]:d[u]) { if (v==p||(l<=idx&&idx<=r)) continue; //cout<<v<<' '<<u<<' '<<idx<<'\n'; if (c[v]==-1) c[v]=!c[u], dfs(v, u, hd, l, r); else if (c[u]==c[v]) f=1; } } int check(int l, int r) { f=0; for (int i=1; i<=n; i++) c[i]=-1, g[i].clear(); for (int i=1; i<=n; i++) if (c[i]==-1) c[i]=1, dfs(i, -1, i, l, r); return f; } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>m>>q; sz=min(100, m); for (int i=1; i<=m; i++) cin>>u[i]>>v[i], d[u[i]].push_back({v[i], i}), d[v[i]].push_back({u[i], i}); dp[sz+1]=m+1; for (int i=sz; i>=1; i--) { int idx=dp[i+1]; if (!check(i-1, idx)) { while (1) { int pu=find(u[idx-1]), pv=find(v[idx-1]); if (pu!=pv) { if (g[pu].size()>g[pv].size()) swap(pu, pv); if (c[u[idx-1]]!=c[v[idx-1]]) for (auto x:g[pu]) c[x]=!c[x]; while (!g[pu].empty()) g[pv].push_back(g[pu].back()), g[pu].pop_back(); dsu[pu]=pv; } else if (find(u[idx-1])==find(v[idx-1])&&c[u[idx-1]]==c[v[idx-1]]) break; idx--; } } dp[i]=idx; //cout<<"dp "<<i<<' '<<dp[i]<<'\n'; } /* for (int i=1; i<=m; i++) { for (int j=i; j<=m; j++) cout<<"check "<<i<<' '<<j<<' '<<check(i+1, j-1)<<'\n'; }*/ while (q--) { cin>>a>>b; if (b>=dp[a]) cout<<"NO\n"; else cout<<"YES\n"; } } /* 6 8 2 1 3 1 5 1 6 2 5 2 6 3 4 3 5 5 6 4 8 4 7 */
#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...