【求调】样例过不了
查看原帖
【求调】样例过不了
559502
TsH_GD楼主2022/8/2 11:38
#include<bits/stdc++.h>

using namespace std;

int n,m;
int dx[4]={0,0,-1,1},
	dy[4]={-1,1,0,0};
int x1,x2,Y,y2;
bool vis[105][105];
int light[105][105];
int ans;

struct Node{
	int x,y;
};

vector<Node>a[105][105];

void init(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++) {
		scanf("%d%d%d%d",&x1,&x2,&Y,&y2);
		a[x1][Y].push_back((Node){x2,y2});	
	} 
}

void bfs(){
	queue<Node>q;
	q.push((Node){1,1});
	while(!q.empty()){
		Node tmp=q.front();
		q.pop();
		if(light[tmp.x][tmp.y]==2){
			int tf=0;
			for(int i=0;i<4;i++){
				int tx=tmp.x+dx[i];
				int ty=tmp.y+dy[i];
				if(light[tx][ty]==1){
					tf=1;
					break;
				}
				if(!tf) continue ;
				vis[tmp.x][tmp.y]=1;
			}
			light[tmp.x][tmp.y]=1;
			for(int i=0;i<a[tmp.x][tmp.y].size();i++){
				Node now=a[tmp.x][tmp.y][i];
				if(vis[now.x][now.y]==1) continue ;
				light[now.x][now.y]=1;
				q.push(now);
			}
			for(int i=0;i<4;i++){
				int tx=tmp.x+dx[i];
				int ty=tmp.y+dy[i];
				if(tx>n||ty>n||vis[tx][ty]==1||light[tx][ty]==0) continue;
				light[tx][ty]=1;
				vis[tx][ty]=1;
				q.push((Node){tx,ty}); 
			}
		} 
	}
}

void solve(){
	bfs();
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=n;j++)
	  if(light[i][j]!=0)
	   ans++;
}

void print(){
	printf("%d",ans);
}

int main(void){
	init();
	solve();
	print();
	return 0;
} 

样例答案:5 我:0

2022/8/2 11:38
加载中...