제출 #649773

#제출 시각아이디문제언어결과실행 시간메모리
649773welleythJoker (BOI20_joker)C++17
0 / 100
110 ms17304 KiB
#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 { have |= c[0][a]&c[0][b]; have |= c[1][a]&c[1][b]; } } 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 **/
#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...