답안 #649834

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
649834 2022-10-11T11:48:17 Z welleyth Joker (BOI20_joker) C++17
25 / 100
477 ms 26096 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;
}

int n,m,q;
vector<pair<int,int>> edges;

bool can(int l,int r){
    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();
    }
    bool have = false;
    for(int j = 0; j < l-1; j++){
        auto&[a,b] = edges[j];
        g[a].pb(b);
        g[b].pb(a);
    }
    for(int j = r; j < m; j++){
        auto&[a,b] = edges[j];
        g[a].pb(b);
        g[b].pb(a);
    }
    for(int j = 1; j <= n; j++){
        if(!used[0][j] && !used[1][j]){
            c[0][j] = 1;
            if(dfs(j,0)){
                return true;
            }
        }
    }
    return false;
}

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

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

    bool answer[q];
    bool f = true;
    if(!can(1,0))
        f = false;

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

    for(int i = 0; i < q; i++){
        int l,r;
        cin >> l >> r;
        if(!f){
            cout << "NO\n";
            continue;
        }
        Queries[l].pb(mp(r,i));
    }
    if(!f)
        return;
    for(int i = 0; i <= m; i++){
        if(Queries[i].empty())
            continue;
        sort(Queries[i].rbegin(),Queries[i].rend());
        if(!can(i,i)){
            for(auto&[r,id] : Queries[i]){
                answer[id] = 0;
            }
            continue;
        }
        int L = i, R = m;
        while(R - L > 1){
            int mid = (L+R)>>1;
            if(can(i,mid))
                L = mid;
            else
                R = mid;
        }
        f = can(i,L);
        for(auto&[r,id] : Queries[i]){
            if(r <= L && f)
                answer[id] = 1;
            else
                answer[id] = 0;
        }
    }

    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

**/

Compilation message

Joker.cpp: In function 'bool can(int, int)':
Joker.cpp:52:10: warning: unused variable 'have' [-Wunused-variable]
   52 |     bool have = false;
      |          ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 4 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Incorrect 3 ms 4948 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 4 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Incorrect 3 ms 4948 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 4 ms 4948 KB Output is correct
3 Correct 269 ms 26096 KB Output is correct
4 Correct 113 ms 19100 KB Output is correct
5 Correct 225 ms 22300 KB Output is correct
6 Correct 249 ms 20172 KB Output is correct
7 Correct 254 ms 19152 KB Output is correct
8 Correct 208 ms 20608 KB Output is correct
9 Correct 294 ms 20988 KB Output is correct
10 Correct 477 ms 20924 KB Output is correct
11 Correct 230 ms 19044 KB Output is correct
12 Correct 359 ms 20600 KB Output is correct
13 Correct 178 ms 18304 KB Output is correct
14 Correct 216 ms 20472 KB Output is correct
15 Correct 378 ms 20112 KB Output is correct
16 Correct 404 ms 20884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 4 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Incorrect 3 ms 4948 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 4 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Incorrect 3 ms 4948 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 4 ms 4948 KB Output is correct
3 Correct 3 ms 4948 KB Output is correct
4 Incorrect 3 ms 4948 KB Output isn't correct
5 Halted 0 ms 0 KB -