Submission #1033125

#TimeUsernameProblemLanguageResultExecution timeMemory
1033125vjudge1Joker (BOI20_joker)C++17
14 / 100
427 ms5876 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define ar array
#define ld long double

const int N = 3e5 + 20;
const int K = 200;
const int INF = 1e15;
const int LOG = 24;
const int MOD = 998244353;

struct DSU{
	vector<int> p;
	vector<int> c;
	vector<int> sz;
	vector<int> bi;
	
	DSU(int n){
		p.clear();
		sz.clear();
		bi.clear();
		c.clear();
		p.resize(n);
		sz.resize(n, 1);
		bi.resize(n, 1);
		c.resize(n, 0);
		for(int i = 0;i < n;i++)p[i] = i;
	}
	
	ar<int,2 > find(int x){
		if(x == p[x])return {x, c[x]};
		ar<int,2 > q = find(p[x]);
		return {q[0], q[1] ^ c[x]};
	}
	
	vector<pair<int&, int> > rb;
	
	bool join(int a,int b){
		ar<int, 2> pa = find(a);
		ar<int, 2> pb = find(b);
		a = pa[0];
		b = pb[0];
		int ca = pa[1];
		int cb = pb[1];
		
		rb.push_back({p[a], p[a]});
		rb.push_back({sz[a], sz[a]});
		rb.push_back({bi[a], bi[a]});
		rb.push_back({c[a], c[a]});
		
		rb.push_back({p[b], p[b]});
		rb.push_back({sz[b], sz[b]});
		rb.push_back({bi[b], bi[b]});
		rb.push_back({c[b], c[b]});
		
		if(a == b){
			if(ca == cb)bi[a] = 0;
			return 0;
		}
		
		if(sz[a] < sz[b])swap(a, b), swap(ca, cb);
		sz[a] += sz[b];
		p[b] = a;
		c[b] = cb ^ ca ^ 1;
		bi[a] &= bi[b];
		return 1;
	}
	inline bool bip(int x){
		return bi[find(x)[0]];
	}
	
	void roll(){
		for(int i = 0;i < 8;i++){
			rb.back().first = rb.back().second;
			rb.pop_back();
		}
	}
};

signed main(){ios_base::sync_with_stdio(false);cin.tie(0);
	int n, m, q;
	cin>>n>>m>>q;
	ar<int, 2> e[m];
	for(int i = 0;i < m;i++){
		int u, v;
		cin>>u>>v;
		--u, --v;
		e[i] = {u, v};
	}
	//assert(0);
	if(n <= 2000 && m <= 2000 && q <= 2000){
		while(q--){
			int l, r;
			cin>>l>>r;
			--l, --r;
			DSU d(n);
			bool ans = 1;
			for(int i = 0;i < m;i++){
				if(l <= i && i <= r)continue;
				d.join(e[i][0], e[i][1]);
				if(!d.bip(e[i][0])){
					ans = 0;
					break;
				}
			}
			cout<< (ans ? "NO\n" : "YES\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...