제출 #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...