#include <bits/stdc++.h>
using namespace std;
const int nx=2e5+5;
int n, m, q, U[nx], V[nx], dp[nx], f, l, r;
struct DSUrollback
{
int sz[nx];
pair<int, int> dsu[nx];
stack<pair<int, int>> history;
bool is_bipartite=1;
pair<int, int> find(int u)
{
if (dsu[u].first==u) return dsu[u];
auto tmp=find(dsu[u].first);
return {tmp.first, tmp.second^dsu[u].second};
}
void unite(int u, int v)
{
auto [pu, cu]=find(u);
auto [pv, cv]=find(v);
if (pu!=pv)
{
if (sz[pu]<sz[pv]) swap(pu, pv);
dsu[pv]={pu, cu^cv};
sz[pu]+=sz[pv];
history.push({pu, pv});
}
else if (cu==cv)
{
if (is_bipartite) history.push({-1, -1});
is_bipartite=0;
}
}
void rollback(int state)
{
while (history.size()>state)
{
auto [u, v]=history.top();
history.pop();
if (u==-1)
{
is_bipartite=1;
}
else
{
dsu[v]={v, 0};
sz[u]-=sz[v];
}
}
}
} d;
void solve(int l, int r, int optr)
{
if (r<l) return;
int md=(l+r)/2, opt=optr, state1=d.history.size();
for (int i=l; i<md; i++) d.unite(U[i], V[i]);
int state2=d.history.size();
while (d.is_bipartite) d.unite(U[opt], V[opt]), opt--;
dp[md]=opt;
d.rollback(state2);
d.unite(U[md], V[md]);
solve(md+1, r, optr);
d.rollback(state1);
for (int i=optr; i>opt; i--) d.unite(U[i], V[i]);
solve(l, md-1, opt);
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>m>>q;
for (int i=1; i<=n; i++) d.sz[i]=1, d.dsu[i]={i, 0};
for (int i=1; i<=m; i++) cin>>U[i]>>V[i], d.unite(U[i], V[i]);
f=d.is_bipartite;
d.rollback(0);
solve(1, m, m);
//for (int i=1; i<=n; i++) cout<<"dp "<<i<<' '<<dp[i]<<'\n';
while (q--)
{
cin>>l>>r;
if (f) cout<<"NO\n";
else if (r<=dp[l]) cout<<"YES\n";
else cout<<"NO\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |