【求调】样例过不了

P2845 [USACO15DEC] Switching on the Lights S

``` #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); light[1][1]=1; for(int i=1;i<=m;i++) { scanf("%d%d%d%d",&x1,&x2,&Y,&y2); a[x1][x2].push_back((Node){Y,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(vis[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]=2; 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; } ``` 更新代码27分
by TsH_GD @ 2022-08-02 11:58:00


|