104422024-04-02 17:03:32111Labirintuscpp17Hibás válasz 0/100388ms189116 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=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
1Elfogadva3ms1808 KiB
2Hibás válasz182ms92356 KiB
subtask20/15
3Hibás válasz28ms7412 KiB
4Hibás válasz8ms7836 KiB
5Hibás válasz125ms8528 KiB
6Hibás válasz125ms10696 KiB
7Hibás válasz83ms15484 KiB
8Hibás válasz85ms17412 KiB
subtask30/18
9Hibás válasz186ms18912 KiB
10Hibás válasz187ms21452 KiB
11Hibás válasz388ms110952 KiB
12Hibás válasz363ms115916 KiB
13Hibás válasz368ms120548 KiB
14Hibás válasz386ms125076 KiB
subtask40/28
15Elfogadva263ms129948 KiB
16Elfogadva275ms133736 KiB
17Elfogadva277ms136312 KiB
18Elfogadva167ms140760 KiB
19Hibás válasz272ms142376 KiB
20Elfogadva143ms146880 KiB
21Elfogadva148ms147984 KiB
22Hibás válasz270ms149116 KiB
23Hibás válasz266ms153836 KiB
subtask50/39
24Hibás válasz37ms68476 KiB
25Hibás válasz18ms68540 KiB
26Hibás válasz126ms72136 KiB
27Hibás válasz126ms74476 KiB
28Hibás válasz123ms77324 KiB
29Hibás válasz123ms77428 KiB
30Hibás válasz370ms166472 KiB
31Hibás válasz340ms169884 KiB
32Hibás válasz244ms173448 KiB
33Hibás válasz351ms175060 KiB
34Hibás válasz245ms178852 KiB
35Hibás válasz234ms180744 KiB
36Hibás válasz289ms182696 KiB
37Hibás válasz287ms185476 KiB
38Elfogadva293ms187404 KiB
39Hibás válasz289ms189116 KiB