全TLE求调
查看原帖
全TLE求调
1047495
Always_Stay_Calm楼主2024/7/29 21:01
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<unordered_set>
#include<map>
#include<unordered_map>
#include<vector>
#include<list>
#include<utility>
#include<climits>
#include<iomanip>
using namespace std;
const int N=500+50;
int n,m,vis[N][N],cnt=1;
int ans;
int k;
char ma[N][N];
bool f[N*N];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
struct node{
	int x,y;
};
queue<node> q;
void bfs(int a,int b){
	q.push({a,b});
	vis[a][b]=cnt;   
	while(!q.empty()){
		node u=q.front();
		int x=u.x,y=u.y;
		q.pop();
		for(int i=0;i<4;i++){
			int nx=x+dx[i],ny=y+dy[i];
			if(nx<0||ny<0||nx>=n||ny>=m){
				f[cnt]=0;
				continue;
			}
			if(vis[nx][ny]==1||ma[nx][ny]!='0'){
				continue;
			}
			q.push({nx,ny});
			vis[nx][ny]=cnt;
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>ma[i][j];
			f[k]=1;
			k++;
			if(ma[i][j]=='0'&&vis[i][j]==0){
				bfs(i,j);
				cnt++;
			}
			if(f[vis[i][j]]==1&&vis[i][j]!=0){
				ans++;
			}
		}
	}
	cout<<ans;
	return 0;
}
2024/7/29 21:01
加载中...