#pragma GCC optimize("Ofast","unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define int long long
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int N,M,Q;
cin >> N >> M >> Q;
vector<vector<pair<int,int>>> adj(N+1);
for(int i=1;i<=M;i++){
int u,v;
cin >> u >> v;
adj[u].emplace_back(v,i);
adj[v].emplace_back(u,i);
}
auto solve = [&](int l,int r){
vector<int> depth(N+1,-1);
bool works = false;
auto dfs = [&](auto&& self,int x,int dep)->void{
depth[x]=dep;
for(auto&[i,idx]:adj[x]){
if(l<=idx and idx<=r)continue;
if(depth[i]==-1){
self(self,i,dep+1);
} else {
if((dep-depth[i])%2==0)works=true;
}
}
};
for(int i=1;i<=N;i++)if(depth[i]==-1)dfs(dfs,i,1);
return works;
};
vector<int> optR(M+1);
const int MAXL = 1;
for(int i=1;i<=min(MAXL,M);i++){
optR[i]=max(optR[i-1],i-1);
for(int jump=(1<<17);jump;jump/=2){
if(optR[i]+jump>M)continue;
if(solve(i,optR[i]+jump))optR[i]+=jump;
}
}
for(int i=1;i<=Q;i++){
int l,r;cin>>l>>r;
if(r<=optR[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... |