联通块写法求助
查看原帖
联通块写法求助
590571
_weishiqi66_楼主2022/12/14 13:18
#include<bits/stdc++.h>
#define ll long long
#define yy yyy
#define map mapp
const int N1=100005;
const int N2=105;
using namespace std;

int wx[5]={0,+1,-1,0,0},wy[5]={0,0,0,+1,-1};
int map[N1][N2],ans[N1],n,m;
int k=0,s;
bool a[N1][N2];
void dfs(int x,int y){
	if(x<1||y<1||x>n||y>n){
		ans[k]--; 
		return;
	} 
	map[x][y]=k;
	for(int i=1;i<=4;i++){
		int xx=x+wx[i],yy=y+wx[i];
		if(a[x][y]!=a[xx][yy]){
			dfs(xx,yy);
			ans[k]++;
		} 
	}
	return;
}

int main(){
	std::ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			char b;cin>>b;
			if(b=='1') a[i][j]=1;
		}		
	}
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		if(map[x][y]==0) ++k,dfs(x,y);
		//cout<<map[x][y]<<endl;//
		cout<<ans[map[x][y]]<<endl;
	}
	return 0;
}
2022/12/14 13:18
加载中...