链接
分析
这题可以使用DFS来解决,如果说从星号开始模拟出发DFS,时间复杂度可能会很坏。例如

.*...
.*.*.
.*.*.
...*.

这"."蛇形走位的话,对于每个星都需要搜索每个“.”,时间复杂度接近n^3是不可接受的
我们把*看成是陆地,.看成是海洋,一块陆地最多四面环海,我们只需要知道海的大小便好。我们O(mn)预处理探索每一片海洋,然后O(mn)再遍历每个星号,查看四周的海洋的大小即可。如何记录海洋的大小,我们给每片海洋设置一个father,称之为海之源(我在扯hhh),只需要把海的大小记录在海的源头便可,然后把每个节点都给一个标号,即可,这里由于1000比较小我就把i乘1000+j当作是每个点的ID,最多999999嘛。遍历的时候我用了set去重,因为有可能四面的海都是同一片海,这就是一个孤岛。
实现

#include <bits/stdc++.h>
#define ll long long
#define ls (p << 1)
#define rs (p << 1 | 1)
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef pair<int, int> PII;
const int N = 1005;
char a[N][N];
int vis[N][N], fa[N * N], cnt[N * N];
int n, m, go[4][2] = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
int sum, p;
void dfs(int x, int y) {fa[1000 * x + y] = p;for (int i = 0; i < 4; i++) {int nx = x + go[i][0], ny = y + go[i][1];if ( nx < 0 || nx >= n || ny < 0 || ny >= m || a[nx][ny] == '*' || vis[nx][ny]) continue;//vis不能写前面,不然会负下标越界vis[nx][ny] = 1;//标记一个sum++;//数目就多一个dfs(nx, ny);}
}
void solve() {cin >> n >> m;for (int i = 0; i < n; i++) cin >> a[i];
//  for (int i = 0; i < n; i++) cout << a[i]; for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (a[i][j] == '*' || vis[i][j]) continue;//如果是陆地或者探索过的海洋过p = 1000 * i + j;//独立编号sum = 1;//初始化vis[i][j] = 1;//注意标记dfs(i, j);cnt[p] = sum;//记录在源头}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {//          cout << cnt[fa[1000 * i + j]];if (a[i][j] == '.') {cout << '.';continue;}int sum = 0;set<int> st;//注意这里,有可能是是同一片海哦if (i - 1 >= 0 && a[i - 1][j] == '.') st.insert(fa[1000 * (i - 1) + j]);if (i + 1 < n && a[i + 1][j] == '.') st.insert(fa[1000 * (i + 1) + j]);if (j - 1 >= 0 && a[i][j - 1] == '.') st.insert(fa[1000 * i + j - 1]);if (j + 1 < m && a[i][j + 1] == '.') st.insert(fa[1000 * i + j + 1]);for (auto x : st) sum += cnt[x];cout << (sum + 1) % 10; //注意+1和%10}cout << '\n';}
}
int main(){ios::sync_with_stdio(false);cin.tie(0);int T = 1;
//  cin >> T;while (T--) solve();return 0;
}

Educational Codeforces Round 5(C. The Labyrinth)【DFS标记父节点】相关推荐

  1. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  2. Educational Codeforces Round 32 G. Xor-MST 01tire + 分治 + Boruvka

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn序列aaa,每两个点之间的边权为ai⊕aja_i\oplus a_jai​⊕aj​,问你最小生成树的权值是多少. n≤2e5,ai< ...

  3. Educational Codeforces Round 54 (Rated for Div.2)

    Educational Codeforces Round 54 (Rated for Div.2) D. Edge Deletion 题意:一张n个点的无向图,保留其中k条边,使得有尽可能多的点与1的 ...

  4. Educational Codeforces Round 103 (Rated for Div. 2)A~E解题报告

    Educational Codeforces Round 103 (Rated for Div. 2) A. K-divisible Sum 原题信息 解题思路 AC代码 #include <b ...

  5. Educational Codeforces Round 25 G. Tree Queries

    题目链接:Educational Codeforces Round 25 G. Tree Queries 题意: 给你一棵树,一开始所有的点全是黑色,有两种操作. 1 x 将x这个点变为黑色,保证第一 ...

  6. [Educational Codeforces Round 16]A. King Moves

    [Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...

  7. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  8. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  9. Educational Codeforces Round 32

    http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...

最新文章

  1. 面对互联网一线大厂,这些技术你需要了解!
  2. SQL Server 2012 复制(发布订阅的研究)
  3. socketmq 设置队列大小_C++编程实例:面向对象的整形队列实现
  4. 产品经理打架引发的问题:如何识别需求及其价值
  5. 问题类像程序员一样思考
  6. 为JVM分配内存:一个案例研究
  7. RegexDemo6
  8. Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!
  9. python utc时间如何取整_Python和Pandas:如何在不同的分辨率上取整unix时间戳(utc):1min5min15min30min1d?...
  10. 何冲(为奥运冠军名字作诗)
  11. sql增删改查_5分钟GET全栈开发 - 增删改查的取经之路
  12. 【工具-SublimeText3】在SublimeText3中无法高亮 .vue 文件内容和less代码的解决方案
  13. 如何调整DOSBOX的运行窗口大小
  14. 【学习周报】深度学习笔记第六周
  15. Python:实现newton raphson牛顿-拉夫森算法(附完整源码)
  16. 英雄联盟也能作为作文素材
  17. CANoe软件之离线数据分析
  18. 每天5分钟机器学习算法:支持向量机的目标函数是怎么来的?
  19. java管道流有哪些_Java管道流
  20. 为了孩子快乐成长,我写了个迷宫游戏

热门文章

  1. 关押罪犯 - C++
  2. APIpace 月出月落和月相API
  3. armeabi-v7a armeabi arm64-v8a区别
  4. maven配置国内源
  5. 文献翻译 | Frequency Domain De-correlation Parameter in Speech Noise Reduction System Based on Frequency
  6. 巡检机器人自主建图麻烦又不准?算丰征途为巡检机器人研究“傻瓜式”精准建图法
  7. 4.3 概率判别式模型(PRML读书笔记)
  8. Python从入门到精通全套完整版教程(懂中文就能学会)
  9. linuxcnc 源码解读01
  10. idea+tomcat实现热部署-修改java代码及时生效