【DFS】CF598D

news2024/7/6 18:39:22

Problem - D - Codeforces

题意:

思路:

直接搜索即可,对于每个连通块都去染色,对于每一个色块都维护这个色块的墙壁数

或者麻烦点用并查集维护也行

Code:

int n, m, k;
bool st[N][N];
char g[N][N];
int ans[N * N];
int id[N][N];
 
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
 
void dfs(int sx, int sy, int cnt)
{
    st[sx][sy] = 1;
    id[sx][sy] = cnt;
    for(int i = 0; i < 4; i ++ )
    {
        int tx = sx + dx[i], ty = sy + dy[i];
        if(tx < 0 || tx >= n || ty >= m || ty < 0 || st[tx][ty]) continue;
        
        if(g[tx][ty] == '*') ans[cnt] ++;
        else dfs(tx, ty, cnt);
    }
}
 
 
signed main()
{
    FAST
    
    cin >> n >> m >> k;
    for(int i = 0; i < n; i ++ ) cin >> g[i];
    
    int cnt = 0;
    for(int i = 0; i < n; i ++ )
        for(int j = 0; j < m; j ++ )
            if(!st[i][j] && g[i][j] == '.') dfs(i, j, cnt ++ );
    
    
    while(k --)
    {
        int x, y; cin >> x >> y;
        x --, y --;
        
        cout << ans[id[x][y]] << '\n';
    }
    
    return 0;
}

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=1e3+10;
const int mxv=1e6+10;
const int mod=1e9+7;

string s[mxn];

set<array<int,4> > S2;
multiset<pair<int,int> > S[mxv];

int N,M,K,x,y;
int F[mxv],st[mxn][mxn];
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};

int find(int x){
	return F[x]=(x==F[x])?x:find(F[x]);
}
void join(int u,int v){
	int f1=find(u),f2=find(v);
	if(f1!=f2) F[f1]=f2;
}
bool check(int x,int y){
	return x>=1&&x<=N&&y>=1&&y<=M;
}
int calc(int x,int y){
	return (x-1)*M+y;
}
void dfs(int x,int y){
	//cout<<x<<" "<<y<<'\n';
	for(int i=0;i<4;i++){
		int vx=x+dx[i];
		int vy=y+dy[i];
		if(check(vx,vy)&&!st[vx][vy]){
			if(s[vx][vy]=='.'){
				st[vx][vy]=1;
				join(calc(x,y),calc(vx,vy));
				//cout<<calc(x,y)<<" "<<calc(vx,vy)<<'\n';
				dfs(vx,vy);
			}else{
				S2.insert({x,y,vx,vy});
				//cout<<x<<" "<<y<<" "<<vx<<" "<<vy<<'\n';
			}
		}
	}
}
void solve(){
	cin>>N>>M>>K;
	for(int i=1;i<=N;i++){
		cin>>s[i];
		s[i]=" "+s[i];
	}
	for(int i=1;i<=N;i++){
		for(int j=1;j<=M;j++) F[calc(i,j)]=calc(i,j);
	}
	for(int i=1;i<=N;i++){
		for(int j=1;j<=M;j++){
			if(!st[i][j]&&s[i][j]=='.'){
				st[i][j]=1;
				dfs(i,j);
			}
		}
	}
	for(auto v:S2){
		S[find(calc(v[0],v[1]))].insert({v[2],v[3]});
	}
	for(int i=1;i<=K;i++){
		cin>>x>>y;
		cout<<S[find(calc(x,y))].size()<<'\n';
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

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

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

相关文章

C#时间轴曲线图形编辑器开发2-核心功能实现

目录 三、关键帧编辑 1、新建Winform工程 &#xff08;1&#xff09;界面布局 &#xff08;2&#xff09;全局变量 2、关键帧添加和删除 &#xff08;1&#xff09;鼠标在曲线上识别 &#xff08;2&#xff09;键盘按键按下捕捉 &#xff08;3&#xff09;关键帧添加、删…

脉冲信号测试应如何选择示波器带宽?

示波器模拟带宽的定义大家都比较熟悉&#xff0c;是针对于正弦波信号定义的。从频域上看&#xff0c;正弦波信号的频谱就是单根谱线&#xff0c;只要示波器的带宽不小于信号的频率&#xff0c;那么就可以有效观测到波形。若要追求更高的幅度测试精度&#xff0c;则可以按照5倍法…

全球视频编码领域顶级大赛放榜,网易云信首次参赛即斩获H.265赛道多项指标第一

近日&#xff0c;2022 MSU 世界视频编码器大赛正式放榜&#xff0c;网易云信首次参赛就获得骄人成绩&#xff0c;自研的结合智码超清技术的 NE265E 编码器以公开身份参赛&#xff0c;在 H.265 赛道下获得多项指标第一名。 首次参赛&#xff0c;斩获 3 项指标第一 MSU Video Co…

【JVM】详细解析java创建对象的具体流程

目录 一、java创建对象的几种方式 1.1、使用new关键字 1.2、反射创建对象 1.2.1、Class.newInstance创建对象 1.2.2、调用构造器再去创建对象Constructor.newInstance 1.3、clone实现 1.4、反序列化 二、创建对象的过程 2.1、分配空间的方式 1、指针碰撞 2、空闲列表 …

Mac代码编辑器sublime text 4中文注册版下载

Sublime Text 4 for Mac简单实用功能强大&#xff0c;是程序员敲代码必备的代码编辑器&#xff0c;sublime text 4中文注册版支持多种编程语言&#xff0c;包括C、Java、Python、Ruby等&#xff0c;可以帮助程序员快速编写代码。Sublime Text的界面简洁、美观&#xff0c;支持多…

数据库访问和组件技术相关概念(ADO、ActiveX、DLL、ODBC等)详解

目录 背景概念ADO核心组件代码展示 ActiveX组件对象模型ADO与ODBC的关系 总结 背景 最近又再重新学习vb&#xff0c;老师说过无论学习什么知识一定不能独立的学习&#xff0c;学习编程语言也是一样&#xff0c;把两种或者三种语言放到一起进行比较&#xff0c;通过比较每种语言…

短视频矩阵源码/系统搭建/源码

一、短视频矩阵系统开发需要具备以下能力 短视频技术能力&#xff1a;开发人员应具备短视频相关技术能力&#xff0c;如视频编解码、视频流媒体传输等。 大数据存储和处理能力&#xff1a;短视频矩阵系统需要处理大量的视频数据&#xff0c;因此需要具备大数据存储和处理的能力…

【Spring Boot】

目录 &#x1f36a;1 Spring Boot 的创建 &#x1f382;2 简单 Spring Boot 程序 &#x1f370;3 Spring Boot 配置文件 &#x1f36e;3.1 properties 基本语法 &#x1fad6;3.2 yml 配置文件说明 &#x1f36d;3.2.1 yml 基本语法 &#x1f369;3.3 配置文件里的配置类…

CSDN浏览如何解决

一、对于平时我们苦恼csdn数据不够好看 当面试等各个场合需要我们装*或者秀技术无法拿出亮眼的时候&#xff0c;刚好我闲时间编译的在线模块适合你 二、如何操作&#xff08;虚拟平台我已给大家放到最后直接使用即可&#xff09; 重点&#xff1a;pc端必须拥有python环境 win…

【lesson6】Linux make和makefile

文章目录 make和Makefile的介绍make和Makefile的使用make和Makefile的项目测试 make和Makefile的介绍 make是一个命令 Makefile是一个文件 make和Makefile是Linux自动化构建项目的工具。 makefile带来的好处就是——“自动化编译”&#xff0c;一旦写好&#xff0c;只需要一个…

6门新兴语言,小众亦强大

编码语言在塑造我们创建软件的方式方面起着至关重要的作用。多年来&#xff0c;我们观察到Python&#xff0c;Java和C等成熟语言的流行。然而&#xff0c;如今一波新的编码语言浪潮已经出现&#xff0c;提出了创造性的解决方案&#xff0c;并推动了软件工程领域所能完成的极限。…

12页线性代数图解教程,github星标9.1k,适合小白

线性代数“困难户”注意&#xff0c;今天我给大家分享一个超适合小白的线性代数学习笔记&#xff0c;只有12页纸&#xff0c;一半都是图解&#xff0c;不用担心看不懂。 这份笔记名为《线性代数的艺术》&#xff0c;是日本学者Kenji Hiranabe基于Gilbert Strang教授的《每个人…

Vue 组件传参 prop/emit

学习了组件用法&#xff0c;就像一种嵌套引用关系&#xff0c;在这个关系中&#xff0c;经常会涉及相互传数据的需求&#xff0c;即父组件传子组件&#xff0c;子组件传父组件。 父、子组件的关系可以总结为&#xff1a; prop 向下传递&#xff08;父传子&#xff09;&#xf…

Docker复习

目录 1. Docker的理解1.1 Docker三要素 2 安装Docker2.1 安装命令2.2 配置阿里云加速器 3 Docker命令3.1 启动类命令3.2 镜像类命令 4 实战4.1 启动容器&#xff0c;自动创建实例4.2 查看Docker内启动的容器4.3 退出容器4.4 其他4.5 导入导出文件4.6 commit 5 Dockerfile5.1 理…

MySQL数据库局域网连接

目录 前言 客户端 开启访问权限 防火墙设置 windows Linux 测试连接 前言 MySQL数据库远程连接&#xff08;局域网&#xff09;是指在局域网内的不同计算机或设备之间&#xff0c;通过网络连接到MySQL数据库服务器的过程。在这种情况下&#xff0c;MySQL数据库服务器位…

编译原理

一&#xff0c;基本概念 二&#xff0c;词法分析

使用python部署chineseocr_lite

使用python部署chineseocr_lite 简介安装报错解决python调用结果 简介 项目地址&#xff1a;https://github.com/DayBreak-u/chineseocr_lite chineseocr_lite 是一个开源项目&#xff0c;用来实现中文的文字识别&#xff0c;支持竖排文字识别、繁体识别&#xff0c;总模型只…

Mysql加锁过程

1、背景 MySQL/InnoDB的加锁分析&#xff0c;一直是一个比较困难的话题。我在工作过程中&#xff0c;经常会有同事咨询这方面的问题。同时&#xff0c;微博上也经常会收到MySQL锁相关的私信&#xff0c;让我帮助解决一些死锁的问题。本文&#xff0c;准备就MySQL/InnoDB的加锁问…

最优除法(力扣)数学 JAVA

给定一正整数数组 nums&#xff0c;nums 中的相邻整数将进行浮点除法。例如&#xff0c; [2,3,4] -> 2 / 3 / 4 。 例如&#xff0c;nums [2,3,4]&#xff0c;我们将求表达式的值 “2/3/4”。 但是&#xff0c;你可以在任意位置添加任意数目的括号&#xff0c;来改变算数的…

LT2911R -D 是一款MIPI/TTL和LVDS互转的一款高性能旋转芯片

LT2911R -D 1.概述&#xff1a;LT2911R-D是一种在MIPI/TTL/LVDS之间相互转换的高性能转换器&#xff0c;除了LVDS转MIPI除外。LT2911R-D反序列化输入的MIPI/LVDS/TTL视频数据&#xff0c;解码数据包、旋转视频、改变帧率&#xff0c;并将格式化的视频数据流转换为AP和移动显示…