답안 #649769

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
649769 2022-10-11T10:44:38 Z welleyth Joker (BOI20_joker) C++17
0 / 100
116 ms 18032 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

//#define int long long
#define pb push_back
#define mp make_pair

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

constexpr int N = (int)2e5 + 111;
constexpr int md = (int)2e5 + 111;

mt19937 rnd(time(nullptr));

vector<int> g[N];
bool used[2][N];
bool c[2][N];

bool dfs(int v,int r,int pr = -1){
    used[r][v] = true;
    c[r][v] = true;
    for(auto& to : g[v]){
        if(pr == to)
            continue;
        if(used[r^1][to]){
            if(c[r][v]&c[r][to])
                return true;
            continue;
        }
        c[r^1][to] = true;
        if(dfs(to,r^1,v))
            return true;
    }
    return false;
}

void solve(){
    int n,m,q;
    cin >> n >> m >> q;

    vector<pair<int,int>> edges;
    for(int i = 0; i < m; i++){
        int a,b;
        cin >> a >> b;
        edges.pb(mp(a,b));
    }

    bool answer[q];

    vector<pair<int,int>> Queries[m+1];

    for(int i = 0; i < q; i++){
        int l,r;
        cin >> l >> r;
        Queries[l].pb(mp(r,i));
    }
    for(int i = 0; i <= m; i++){
        if(Queries[i].empty())
            continue;
        sort(Queries[i].rbegin(),Queries[i].rend());
        for(int j = 0; j <= n; j++){
            used[0][j] = false;
            used[1][j] = false;
            c[0][j] = c[1][j] = 0;
            g[j].clear();
        }
        for(int j = 0; j < i-1; j++){
            auto&[a,b] = edges[j];
            g[a].pb(b);
            g[b].pb(a);
        }
        int pr = m;
        bool have = false;
        for(int i = 1; i <= n; i++){
            if(!g[i].empty() && !used[0][i] && !used[1][i]){
                have |= dfs(i,0);
            }
        }
        for(auto&[r,id] : Queries[i]){
            for(int j = r; j < pr; j++){
                auto&[a,b] = edges[j];
                g[a].pb(b);
                g[b].pb(a);
                if(!used[0][a] && !used[1][a]){
                    have |= dfs(a,0);
                } else if(used[0][a])
                    have |= dfs(a,0);
                else
                    have |= dfs(a,1);
                if(!used[0][b] && !used[1][b]){
                    have |= dfs(b,0);
                } else if(used[0][b])
                    have |= dfs(b,0);
                else
                    have |= dfs(b,1);
            }
            pr = r;
            answer[id] = have;
        }
    }

    for(int i = 0; i < q; i++){
        cout << (answer[i] ? "YES" : "NO") << "\n";
    }

    return;
}

signed main(){
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
//    init();
    int tests = 1;
//    cin >> tests;
    for(int test = 1; test <= tests; test++){
//        cerr << "test = " << test << "\n";
        solve();
    }
    return 0;
}
/**
6 8 2
1 3
1 5
1 6
2 5
2 6
3 4
3 5
5 6
4 7
4 8

**/
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Incorrect 3 ms 5028 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Incorrect 3 ms 5028 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Incorrect 116 ms 18032 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Incorrect 3 ms 5028 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Incorrect 3 ms 5028 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Incorrect 3 ms 5028 KB Output isn't correct
6 Halted 0 ms 0 KB -