#ifndef local
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("O3")
#endif
#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;
using ll = int;
using pll = pair<ll,ll>;
using str = string;
using ld = long double;
using hash_map =gp_hash_table<int, int>;
using hash_set= gp_hash_table <int, null_type>;
auto sd = std::chrono::high_resolution_clock::now().time_since_epoch().count();
mt19937 rnd(sd);
typedef tree<ll, null_type, less<>, rb_tree_tag,
tree_order_statistics_node_update> ord_set;
ll inv(ll c){
if (c==1)return 2;
return 1;
}
vector<vector<pll>> g;
void dfs(ll v, vector<ll>&col, ll c, bool &is, ll l, ll r){
col[v] = c;
for (auto u : g[v]){
if (l <= u.second && u.second <= r){
continue;
}
if (!col[u.first]){
dfs(u.first, col, inv(c),is, l,r);
}
else if (c == col[u.first]){
is = false;
return;
}
}
}
void solve1() {
ll n;
cin >> n;
ll m;
cin >> m; ll q; cin >> q;
vector<pll> edges;
g.resize(n);
for (int i =0; i < m; i++){
int a, b;
cin>>a>>b;
a--; b--;
edges.emplace_back(a, b);
g[a].emplace_back(b, i);
g[b].emplace_back(a, i);
}
vector<int>col(n);
if (max(n, m)*q <= 4000000ll){
for (int i = 0; i <q; i++){
ll l, r;
cin>>l>>r; l--; r--;
col.assign(n, 0);
bool is =true;
for (int j = 0; j < n; j++){
if (!col[j]){
dfs(j, col, 1, is, l, r);
}
}
if (!is){
cout<<"YES\n";
}
else {
cout<<"NO\n";
}
}
}
else {
vector<ll> ans(m);
for (int i = 0; i < min(5, m); i++){
ll li = i-1;
ll ri = m;
while (ri-li>1) {
ll mi =(li+ri)/2;
bool is =true;
col.assign(n, 0);
for (int j = 0; j < n; j++){
if (!col[j]){
dfs(j, col, 1, is, i, mi);
}
}
if (!is) {
li = mi;
}
else ri = mi;
}
ans[i] = li;
}
for (int i =0; i < q; i++){
int l, r;
cin>>l>>r;
l--;
r--;
if (r<=ans[l]){
cout<<"YES\n";
}
else cout<<"NO\n";
}
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
#ifdef local
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
solve1();
#ifdef local
printf_s("\n%.5f s", (double) clock() / CLOCKS_PER_SEC);
#endif
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |