60分求调
查看原帖
60分求调
773554
1048645526wangyuxin楼主2024/11/26 21:11
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct shudui{long x,y;};
char a[1001][1001];
long b[1001][1001];//b存数值 
int n,m;
bool f[1001][1001];
queue<int> qx,qy;
shudui fu[1001][1001];
shudui find(int x,int y);
void hebing(int x1,int y1,int x2,int y2);
void bfs(int x,int y);
signed main(){
//	freopen("sb.in","r",stdin);
//	freopen("sb.out","w",stdout);
	cin>>n>>m;
	char ch;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>ch;
			a[i][j]=ch;
		}
	}
//	for(int i=1;i<=n;i++){
//		cout<<a[i]<<endl;
//	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			fu[i][j].x=i;
			fu[i][j].y=j;
		}
	}
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		if(fu[x][y].x==x&&fu[x][y].y==y){
			bfs(x,y);
			printf("%ld\n",b[x][y]); 
		}else{
			shudui ch;
			ch=find(x,y);
			printf("%ld\n",b[ch.x][ch.y]); 
		}
	}
	return 0;
}
shudui find(int x,int y){
	shudui ch;
	if(fu[x][y].x==x&&fu[x][y].y==y){
		ch.x=x;ch.y=y;
		return ch;
	}else{
		ch=find(fu[x][y].x,fu[x][y].y);
		fu[x][y].x=ch.x;
		fu[x][y].y=ch.y;
		return ch;
	}
}
void hebing(int x1,int y1,int x2,int y2){
	shudui ch1,ch2;
	ch1=find(x1,y1);
	ch2=find(x2,y2);
	fu[ch2.x][ch2.y].x=fu[ch1.x][ch1.y].x;
	fu[ch2.x][ch2.y].y=fu[ch1.x][ch1.y].y;
	return ;
}
void bfs(int x,int y){
	
	int tx[5]={0,1,0,-1,0};
	int ty[5]={0,0,1,0,-1};
	qx.push(x);
	qy.push(y);
	while(qx.size()!=0){
		char ch;int xx=qx.front(),yy=qy.front();
		if(a[xx][yy]=='0'){
			ch='1';
		}else{
			if(a[xx][yy]=='1'){
				ch='0';
			}//else ch=0;
		}
		b[x][y]++;
		a[xx][yy]='2';
		f[xx][yy]=1;
//		cout<<xx<<' '<<yy<<endl;
//		cout<<ch<<endl;
//		for(int i=1;i<=n;i++){
//			for(int j=1;j<=n;j++){
//				cout<<a[i][j];
//			}cout<<endl;
//		}cout<<endl;
		for(int i=1;i<=4;i++){
			if(a[xx+tx[i]][yy+ty[i]]==ch&&xx+tx[i]>0&&xx+tx[i]<=n&&yy+ty[i]>0&&yy+ty[i]<=n&&f[xx+tx[i]][yy+ty[i]]==0){
//				cout<<xx+tx[i]<<' '<<yy+ty[i]<<endl;
				f[xx+tx[i]][yy+ty[i]]=1;
				qx.push(xx+tx[i]);
				qy.push(yy+ty[i]);
				hebing(x,y,xx+tx[i],yy+ty[i]);
			}
		}
		qx.pop();
		qy.pop();
	}
	return ;
}
2024/11/26 21:11
加载中...