Submission #1204550

#TimeUsernameProblemLanguageResultExecution timeMemory
1204550UnforgettableplJoker (BOI20_joker)C++20
0 / 100
2092 ms17092 KiB
#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 = 100;
    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 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...