题目

原题链接:https://www.nowcoder.com/acm/contest/106/L

在100000 * 10000的空地上,有n个时间点,每个时间点会在(xi,yi)上种一棵树。

定义绿色:被树包围的空地的个数。

问每个时间点之后绿色为多少。如图:

思路

逆向求解,从(0,0)位置将圈外的全标记(给空地加一圈),在分别考虑当前的树,是在圈内还是圈的外围。

由于vis是全局数组,之后的bfs都非常快,每个点只遍历过一次。

代码实现

 #include<stdio.h>
#include<queue>
#include<iostream>
using namespace std; typedef pair<int, int> P;
const int maxn = + ; //点的最大个数
const int SIZE = + ; //地图大小
const int offset = ; //偏置
const int dx[] = { -,,, };
const int dy[] = { ,,,- };
int n,xi[maxn],yi[maxn],ans[maxn];
bool vis[SIZE][SIZE], maze[SIZE][SIZE]; int bfs(int x, int y)
{
int ret = ;
queue<P>q;
vis[x][y] = true;
q.push(P(x, y));
while (!q.empty())
{
P p = q.front(); q.pop();
ret++;
for (int i = ; i < ; i++)
{
int nx = p.first + dx[i], ny = p.second + dy[i];
if (nx >= && nx < SIZE && ny >= && ny < SIZE && (!vis[nx][ny]))
{
vis[nx][ny] = true;
q.push(P(nx, ny));
}
}
}
return ret;
} int main()
{
scanf("%d", &n);
for(int i = ;i <= n;i++)
{
scanf("%d%d", &xi[i], &yi[i]);
maze[xi[i] + offset][yi[i] + offset] = ;
vis[xi[i] + offset][yi[i] + offset] = ;
} bfs(, );
int res = ;
for (int i = ; i < SIZE; i++)
for (int j = ; j < SIZE; j++)
if (vis[i][j] == false) res++;
ans[n] = res; for (int i = n; i >= ; i--) //1~3棵以内不可能围成空地
{
int u = xi[i] + offset;
int v = yi[i] + offset;
maze[u][v] = ;
int cnt = ;
for (int j = ; j < ; j++)
{
int nu = u + dx[j], nv = v + dy[j];
if (maze[nu][nv] == && vis[nu][nv] == ) cnt++;
}
if (cnt == ) //cnt == 0,表示该点在内部
{
vis[u][v] = ;
res++;
}
else res -= (bfs(u, v) - );
ans[i - ] = res;
}
for (int i = ; i <= n; i++)
printf("%d\n", ans[i]);
return ;
}

参考链接:https://www.nowcoder.com/acm/contest/view-submission?submissionId=26038731

最新文章

  1. ubuntu修改主机名
  2. MSSQL附加数据库5120错误(拒绝访问)处理方法
  3. HoloLens开发手记 - Unity之Tracking loss
  4. java开发环境的主题色的变化
  5. git diff patch
  6. imx6 KEY_ROW4 power output high fail
  7. web.config的数据库连接字符串进行加密
  8. PB中无法插入ole控件,解决办法
  9. asp.net中的绝对路径和相对路径
  10. RMQ之ST算法
  11. OUC_OptKernel_oshixiaoxiliu_好题推荐
  12. 《HTML5与CSS3权威指南》读书笔记(上册)—HTML5篇
  13. robots.txt 文件指南
  14. jdb
  15. Kia&#39;s Calculation hdu4726
  16. Alpha冲刺No.2
  17. c/c++再学习:查找算法了解
  18. python pip 安装库文件报错:pip install ImportError: No module named _internal
  19. Python_试题_23
  20. golang 中的 sizeof 以及 golang中的 union

热门文章

  1. html语义化 -------&lt;fieldset&gt;和&lt;legend&gt;
  2. python学习笔记5-自定义函数
  3. 793. Preimage Size of Factorial Zeroes Function
  4. 二分匹配ZOJ3646
  5. stylus基础教程,stylus实例教程,stylus语法总结
  6. django网页渲染
  7. _bzoj1096 [ZJOI2007]仓库建设【斜率优化dp】
  8. 517 Super Washing Machines 超级洗衣机
  9. subline应用之常用插件
  10. [已读]编写高质量代码 改善JavaScript程序的188个建议