104432024-04-02 17:06:39111Labirintuscpp17Elfogadva 100/100365ms93532 KiB
#include<bits/stdc++.h>
using namespace std;

// #define int long long

struct DSU{
	vector<int>v;
	vector<pair<int,int>>s;
	
	DSU(){
	}
	
	DSU(int n):v(n,-1){
	}
	
	int find(int i){
		return v[i]<0?i:find(v[i]);
	}
	
	void unite(int a,int b){
		a=find(a);
		b=find(b);
		if(a==b){
			s.emplace_back(-1,-1);
			s.emplace_back(-1,-1);
			return;
		}
		if(a>b){
			swap(a,b);
		}
		s.emplace_back(a,v[a]);
		s.emplace_back(b,v[b]);
		v[a]+=v[b];
		v[b]=a;
	}
	
	void undo(){
		for(int i=0;i<2;i++){
			auto[a,aa]=s.back();
			s.pop_back();
			if(a!=-1){
				v[a]=aa;
			}
		}
	}
};

int R,C;
DSU d;

int x(int r,int c){
	return r*(C+1)+c;
}

void init_labyrinth(int R_,int C_,std::vector<std::vector<int>>L){
	R=R_,C=C_;
	d=DSU((R+1)*(C+1));
	for(int i=0;i+1<C;i++){
		d.unite(x(R,i),x(R,i+1));
	}
	for(int i=0;i+1<R;i++){
		d.unite(x(i,C),x(i+1,C));
	}
	for(int i=1;i+1<=C;i++){
		d.unite(x(0,i),x(0,i+1));
	}
	for(int i=1;i+1<=R;i++){
		d.unite(x(i,0),x(i+1,0));
	}
	for(int i=0;i<R;i++){
		for(int j=0;j<C;j++){
			if(L[i][j]){
				d.unite(x(i,j),x(i,j+1));
				d.unite(x(i,j),x(i+1,j));
				d.unite(x(i,j),x(i+1,j+1));
			}
		}
	}
}

bool can_escape(int N,std::vector<int>U,std::vector<int>V){
	for(int k=0;k<N;k++){
		int i=U[k],j=V[k];
		d.unite(x(i,j),x(i,j+1));
		d.unite(x(i,j),x(i+1,j));
		d.unite(x(i,j),x(i+1,j+1));
	}
	int ans=d.find(x(R,C-1))!=d.find(x(R-1,C));
	for(int k=0;k<N;k++){
		d.undo();
		d.undo();
		d.undo();
	}
	return ans;
}

#ifdef LOCAL
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int R,C,Q;
	cin>>R>>C>>Q;
	vector<vector<int>>L(R,vector<int>(C));
	for(int i=0;i<R;i++){
		for(int j=0;j<C;j++){
			char c;
			cin>>c;
			L[i][j]=c-'0';
		}
	}
	init_labyrinth(R,C,L);
	while(Q--){
		int N;
		cin>>N;
		vector<int>U(N),V(N);
		for(int i=0;i<N;i++){
			cin>>U[i]>>V[i];
		}
		cout<<can_escape(N,U,V)<<'\n';
	}
	return 0;
}
#endif
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1996 KiB
2Elfogadva185ms91432 KiB
subtask215/15
3Elfogadva28ms5400 KiB
4Elfogadva8ms5360 KiB
5Elfogadva120ms3508 KiB
6Elfogadva120ms3084 KiB
7Elfogadva79ms5836 KiB
8Elfogadva81ms5920 KiB
subtask318/18
9Elfogadva170ms4436 KiB
10Elfogadva158ms4012 KiB
11Elfogadva365ms92560 KiB
12Elfogadva337ms92732 KiB
13Elfogadva344ms92672 KiB
14Elfogadva360ms92632 KiB
subtask428/28
15Elfogadva257ms92672 KiB
16Elfogadva257ms92668 KiB
17Elfogadva266ms92804 KiB
18Elfogadva164ms92808 KiB
19Elfogadva256ms92804 KiB
20Elfogadva133ms92808 KiB
21Elfogadva145ms93072 KiB
22Elfogadva256ms93072 KiB
23Elfogadva254ms93080 KiB
subtask539/39
24Elfogadva35ms3948 KiB
25Elfogadva17ms3780 KiB
26Elfogadva122ms4588 KiB
27Elfogadva120ms3988 KiB
28Elfogadva119ms4232 KiB
29Elfogadva120ms3984 KiB
30Elfogadva356ms92908 KiB
31Elfogadva340ms93108 KiB
32Elfogadva231ms93208 KiB
33Elfogadva328ms93224 KiB
34Elfogadva230ms93300 KiB
35Elfogadva230ms93308 KiB
36Elfogadva277ms93300 KiB
37Elfogadva273ms93184 KiB
38Elfogadva291ms93320 KiB
39Elfogadva284ms93532 KiB