제출 #726665

#제출 시각아이디문제언어결과실행 시간메모리
726665JohannJoker (BOI20_joker)C++14
39 / 100
2049 ms26120 KiB
#include "bits/stdc++.h"
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pii> vpii;
typedef vector<vpii> vvpii;
#define sz(x) (int)(x).size()

int N, M, Q;
vvpii adj;
vpii E;

bool possible_bfs(int l, int r)
{
    vi color(N, -1);
    queue<int> q;
    for (int v = 0; v < N; ++v)
    {
        if (color[v] != -1)
            continue;
        q.push(v), color[v] = 0;
        while (!q.empty())
        {
            int u = q.front();
            q.pop();
            for (pii e : adj[u])
            {
                if (e.second < l || e.second > r)
                {
                    if (color[e.first] == color[u])
                        return true;
                    if (color[e.first] == -1)
                    {
                        q.push(e.first);
                        color[e.first] = !color[u];
                    }
                }
            }
        }
    }
    return false;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> N >> M >> Q;
    adj.resize(N);
    E.resize(M);
    for (int i = 0, a, b; i < M; ++i)
    {
        cin >> a >> b;
        --a, --b;
        adj[a].push_back({b, i}), adj[b].push_back({a, i});
        E[i] = {min(a, b), max(a, b)};
    }

    vvpii Queries(M + 1);
    vi ans(Q);
    for (int i = 0, l, r; i < Q; ++i)
    {
        cin >> l >> r;
        --l, --r; // [l, r] inclusive is blocked
        l = min(M, l), r = min(M, r);
        Queries[l].push_back({r, i});
    }
    for (int l = 0; l < sz(Queries); ++l)
    {
        if (Queries[l].empty())
            continue;
        int bl = l - 1, br = M;
        while (bl < br)
        {
            int m = (bl + br + 1) / 2;
            if (possible_bfs(l, m))
                bl = m;
            else
                br = m - 1;
        }
        for (pii q : Queries[l])
            ans[q.second] = (q.first <= bl);
    }

    for (int a : ans)
        if (a)
            cout << "YES\n";
        else
            cout << "NO\n";

    return 0;
}
#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...