【CodeForces - 616C 】The Labyrinth点石成金(并查集,dfs)

题干:

小O无意间发现了一张藏宝图,它跟随藏宝图的指引来到了一个宫殿,宫殿的地板被分成了n*m块格子,每个格子上放置了金子或者石头

藏宝图告诉小O,它可以选择一块石头变成金子,并且带走与变化后的金子联通区域的所有金子(联通指的是上下左右,不能斜着)

小O想计算一下点每个石头能带走的金子个数,帮帮他吧。

输入:
第一行两个数n,m (1 <= n,m <= 1000 )
随后n行,每行m个字符,表示宫殿地板上放置的物品,' * '表示放置的是石头,' . '表示放置的是金子

输出:
在每个石头位置输出如果将该位置点石成金,能带走的金子个数,方便起见,将这个数%10再输出

输入:
3 3
*.*
.*.
*.*
输出:
3.3
.5.
3.3

输入:
4 5
**..*
..***
.*.*.
*.*.*
输出:
46..3
..732
.6.4.
5.4.3
 

Note

In first example, if we imagine that the central cell is empty then it will be included to component of size 5 (cross). If any of the corner cell will be empty then it will be included to component of size 3 (corner).

解题报告:

  搜索上并查集就可以了。注意统计的时候,有可能重复,比如

这样相同的答案会统计四次。所以要去重一下。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 1000 + 5;
char maze[MAX][MAX];
int ans[MAX][MAX];
bool vis[MAX][MAX];
int f[MAX*MAX];
int num[MAX*MAX]; 
int n,m;
int nx[4] = {0,1,0,-1};
int ny[4] = {1,0,-1,0};
int getf(int v) {return v == f[v] ? v : f[v] = getf(f[v]);
}
void merge(int u,int v) {int t1 = getf(u);int t2 = getf(v);f[t2] = t1;
}
int get(int x,int y) {return (x-1)*m +y;
}
void go(int x,int y) {for(int k = 0; k<4; k++) {int tx = x + nx[k];int ty = y + ny[k];if(tx < 1 || tx > n || ty < 1 || ty > m) continue;if(maze[tx][ty] == '*' || vis[tx][ty]) continue;merge(get(x,y),get(tx,ty));vis[tx][ty] = 1;go(tx,ty);}
}
int main()
{cin>>n>>m;for(int i = 0; i<=n*m; i++) {f[i] = i;}for(int i = 1; i<=n; i++) {scanf("%s",maze[i]+1);}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {if(maze[i][j] == '.' && vis[i][j] == 0) {vis[i][j] = 1;go(i,j);}			}}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {if(maze[i][j] == '*') continue;num[getf(get(i,j))]++;}}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {if(maze[i][j] == '.') ans[i][j] = '.';else {int cnt = 0;set<int> ss;for(int k = 0; k<4; k++) {int tx = i + nx[k];int ty = j + ny[k];if(maze[tx][ty] == '*')continue;if(tx < 1 || tx > n || ty < 1 || ty > m) continue;ss.insert(getf(get(tx,ty)));}auto it = ss.begin();for(;it!=ss.end();++it) cnt += num[*it];ans[i][j] = cnt;}}}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {if(maze[i][j] == '.') printf(".");else printf("%d",(ans[i][j]+1)%10);}puts("");}return 0 ;
}
/*
16:00-16:13
*/
/*
4 1
*
.
*
.
*/

别忘了这样写的话,每个入口都要加上vis[][]=1;(指的是main函数里)

题目不难,但是还是WA了一发,映射的时候注意是(x-1)*m而不是(x-1)*n。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsp mysql 推荐算法_基于jsp+mysql+Spring+mybatis的SSM协同过滤音乐推荐管理系统(个性化推荐)...

运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以tomcat环境&#xff1a; 最好是Tomcat 7.x,8.x,9.x版本均可&#xff0c;理论上Tomcat版本不是太老都可以。&#xff0c;我们在这个环…

项目进度计划甘特图_甘特图做项目进度计划的技巧?

原标题&#xff1a;甘特图做项目进度计划的技巧&#xff1f;甘特图怎么做项目进度计划&#xff1f;首先我们先了解一下&#xff0c;什么是甘特图。甘特图(Gantt chart)又称为横道图、条状图(Bar chart)&#xff0c;是由提出者亨利L甘特来命名的。甘特图通过条状图来显示项目&am…

wp config.php mysql_WordPress手动配置wp-config.php文件

前不久在WordPress技术群里看到有人在安装网站程序的时候出现了系统不能自动配置wp-config.php文件的问题&#xff0c;那么这个时候就需要我们手动进行配置了。问题描述&#xff1a;如果自动创建未能成功&#xff0c;不用担心&#xff0c;您要做的只是将数据库信息填入配置文件…

thinkphp使用echarts_Thinkphp 与Echarts-php 使用

这里推荐大家使用composer 依赖管理工具 导入Echarts-php库{"name": "hisune/echarts-php","version": "1.0.10","version_normalized": "1.0.10.0","source": {"type": "git",&qu…

创建文件夹 java_java怎么建文件夹

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。下面我们来看一下java中创建文件夹的方法&#xff1a;示例&#xff1a;package com.zz;import java.io.File;import java.i…

【Gym - 101986F】Pizza Delivery(Dijkstra最短路,建图方式,反向建图,Tarjan求桥,图论模板)

题干&#xff1a; 题目大意&#xff1a; 一个有向图&#xff0c;编号1~n的n个点&#xff0c;m条边&#xff0c;规定1为起点&#xff0c;2为终点&#xff0c;问对于每一条边&#xff0c;反转它的方向&#xff0c;最短路会不会发生改变&#xff0c;如果变短了&#xff0c;输出HA…

【CF#505B】Mr. Kitayuta's Colorful Graph (并查集或Floyd或BFS)

题干&#xff1a; Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The vertices of the graph are numbered from 1 to n. Each edge, namely edge i, has a color ci, connecting vertex ai and bi. Mr. Kitayuta wants you to p…

java data jpa_Spring Data JPA(一)简介

Spring Data JPA介绍可以理解为JPA规范的再次封装抽象&#xff0c;底层还是使用了Hibernate的JPA技术实现&#xff0c;引用JPQL(Java Persistence Query Language)查询语言&#xff0c;属于Spring整个生态体系的一部分。随着Spring Boot和Spring Cloud在市场上的流行&#xff0…

【CodeForces - 438D】The Child and Sequence(线段树区间取模操作)

题干&#xff1a; At the childrens day, the child came to Pickss house, and messed his house up. Picks was angry at him. A lot of important things were lost, in particular the favorite sequence of Picks. Fortunately, Picks remembers how to repair the sequ…

java 自定义xml_6.1 如何在spring中自定义xml标签

dubbo自定义了很多xml标签&#xff0c;例如&#xff0c;那么这些自定义标签是怎么与spring结合起来的呢&#xff1f;我们先看一个简单的例子。一 编写模型类1 packagecom.hulk.testdubbo.model;23 public classHero {4 privateString name;5 private intage;67 publicString ge…

java 模块设计模式_Java9模块化学习笔记二之模块设计模式

模块设计的原则:1、防止出现编译时循环依赖(主要是编译器不支持)&#xff0c;但运行时是允许循环依赖的&#xff0c;比如GUI应用2、明确模块的边界几种模块设计:API模块&#xff0c;聚合模块(比如java.base)可选依赖两种方式:1、可选的编译时依赖(类似于maven的provided scope)…

java 手写签名_Android 自定义View手写签名并保存图片

GIF压缩有问题&#xff0c;运行很顺滑&#xff01;&#xff01;&#xff01;1.自定义View——支持设置画笔颜色&#xff0c;画笔宽度&#xff0c;画板颜色&#xff0c;清除画板&#xff0c;检查是否有签名&#xff0c;保存画板图片(复制粘贴可直接使用)/*** Created by YyyyQ o…

【2019第十届蓝桥杯省赛C/C++B组题解】(非官方题解)

A。 数数题。 答案&#xff1a;490 B。 26进制模拟。 答案&#xff1a;BYQ C。 类似fib数列求值&#xff0c;递推一下就好。 答案&#xff1a;4659 D。 注意两个坑点&#xff0c;一个是正整数&#xff0c;所以枚举要从1开始。第二个坑点是互不相同的&#xff0c;为了达到这…

java对象模型 指令_深入理解多线程(二)—— Java的对象模型

上一篇文章中简单介绍过synchronized关键字的方式&#xff0c;其中&#xff0c;同步代码块使用monitorenter和monitorexit两个指令实现&#xff0c;同步方法使用ACC_SYNCHRONIZED标记符实现。后面几篇文章会从JVM源码的角度更加深入&#xff0c;层层剥开synchronized的面纱。在…

java 学生课程成绩_Java课设--学生成绩管理系统一

写在前面这个项目是Java课程的课设&#xff0c;一共花了5天的时间去完成它&#xff0c;在这期间感谢一些博主的帮助&#xff0c;让我了解到了一些新的技术知识&#xff0c;所以打算写这一系列博客来介绍一整个课设项目&#xff0c;也为了帮助之后的人&#xff0c;如有错误&…

java调用cplex案例_【CPLEX教程03】java调用cplex求解一个TSP问题模型

前面我们已经搭建好cplex的java环境了&#xff0c;相信大家已经跃跃欲试&#xff0c;想动手写几个模型了。今天就来拿一个TSP的问题模型来给大家演示一下吧~CPLEX系列教程可以关注我们的公众号哦&#xff01;获取更多精彩消息&#xff01;01 TSP寤烘ā关于TSP建模&#xff0c;就…

java 自动启动监听_Spring Boot 启动事件和监听器,太强大了!

大家都知道&#xff0c;在 Spring 框架中事件和监听无处不在&#xff0c;打通了 Spring 框架的任督二脉&#xff0c;事件和监听也是 Spring 框架必学的核心知识之一。一般来说&#xff0c;我们很少会使用到应用程序事件&#xff0c;但我们也不要忘了它们的存在&#xff0c;比如…

java day_Java_Day7(上)

Java learning_Day7(上)内容常用类枚举类型常用类String 类java.lang.String 类代表不可变的字符序列。String 类的常见构造方法&#xff1a;String(String original)创建一个 String 对象为 original 的拷贝。String(char[] value)用一个字符数组创建一个 String 对象。String…

java关键字 valotile_Java内存模型-jsr133规范介绍,java中volatile关键字的含义

最近在看《深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践》讲到了线程相关的细节知识&#xff0c;里面讲述了关于java内存模型&#xff0c;也就是jsr 133定义的规范。系统的看了jsr 133规范的前面几个章节的内容&#xff0c;觉得受益匪浅。废话不说&#xff0c;简要的介…

Java重载和重写6_深入理解Java中的重写和重载

深入理解Java中的重写和重载重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念。但是对于新手来说也比较容易混淆。本文通过两个简单的例子说明了他们之间的区别。定义重载简单说&#xff0c;就是函数或者方法有同样的名称&#xff0c;但是参数列表不相同的情形&…