首页 > 其他分享 >睿爸p335

睿爸p335

时间:2024-08-21 21:37:53浏览次数:10  
标签:sy sx tx int 55 vis p335

每次找到最高点,进行 BFS 染色,每次染色之后答案 \(+1\) 就可以了

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, m, k, ans;
char a[55][55]; //地图
bool vis[55][55];
int dx[4] = {0, 1, 0, -1}; //方位数组
int dy[4] = {1, 0, -1, 0};
struct node {
	int x, y; //x、y表示走到哪个点
};

void bfs(int sx, int sy) { //bfs染色 
	queue<node>q;
	q.push({sx, sy}); //放进队列
	vis[sx][sy] = 1;
	while(!q.empty()) {
		int x = q.front().x; //取出队头元素
		int y = q.front().y;
		q.pop();
		for (int i = 0; i < 4; i++) {
			int tx = x + dx[i], ty = y + dy[i];
			if(tx >= 1 && tx <= n && ty >= 1 && ty <= m && !vis[tx][ty] && a[x][y] <= a[tx][ty]) { //边界条件
				vis[tx][ty] = 1;
				q.push({tx, ty}); //把新的点放进队列
			}
		}
	}
}

signed main() {
	cin >> k;
	while(k--) {
		ans = 0;
		memset(vis, 0, sizeof(vis));
		cin >> n >> m;
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= m; j++)
				cin >> a[i][j];
		for (char c = 'a'; c <= 'z'; c++) //枚举最高点 
			for (int i = 1; i <= n; i++)
				for (int j = 1; j <= m; j++)
					if(!vis[i][j] && a[i][j] == c) { //如果这个点没有被染色过并且还是最高点,那么进行染色 
						bfs(i, j);
						ans++;
					}
		cout << ans << endl;
	}
	return 0;
}

标签:sy,sx,tx,int,55,vis,p335
From: https://www.cnblogs.com/chrispang/p/18372615

相关文章

  • 【题解】P3356 火星探险问题
    \(\large\mathfrak{1st.\Preamble|}\)前言这都什么年代了网络流24题居然还能写题解!个人认为这篇题解讲的还是比较详细的。\(\large\mathfrak{2nd.\Solution|}\)题解看到题目的第一眼,我的反应是这样的:这不跟深海机器人问题差不多吗?Ctrl-CCtrl-V秒了。不过我还是讲讲怎......
  • P3350 [ZJOI2016] 旅行者
    咕了2天才写的题解还是比较经典的题目,分治处理网格图最短路离线下来,利用分治的思想,用一条线把网格图平均劈成两半,每次只考虑询问在两块的一对点,所有的线必须经过直线上的一个点,于是我把线上所有点都在规定范围内跑一次dijkstra,最后直接算答案,显然我想让最短路跑的次数最小,每次选......
  • P3350 [ZJOI2016] 旅行者
    P3350[ZJOI2016]旅行者分治+最短路网格图可以想到分治。每次将长边分为两半,处理越过中线的询问。那么就可以枚举中线上的每个点更新答案,经过\(x\)的路径更新\((u,v)\)就是\(dis_{u,x}+dis_{x,v}\)。每次预处理中线上每个点的单源最短路即可。设\(S=nm\),复杂度\(O(S\sq......
  • 洛谷 P3353 在你窗外闪耀的星星
    题意:给定一个宽度w,n个数,每个数有一个权值。窗口可以变换位置,求该窗口能容纳的最大权值。思路:前缀和+滑动窗口硬算。总结:一开始感觉是fenwicktree,但是每次查询的区间固定,不需要fenwicktree,不如滑动窗口来的方便。voidsolve(){intn,w;cin>>n>>w;vector<in......
  • P3354 [IOI2005] Riv 河流
    P3354[IOI2005]Riv河流树形dp我们很容易套路地用\(f_{u,i}\)表示在\(u\)子树中,\(u\)节点放了\(i\)个伐木场的最小花费。但是这样无法转移,原因是无法表示路径长度,也无法知道运送数量。所以我们现在考虑增加状态,能够表示出距离。只考虑\(u\)节点的花费,其木头要运送......
  • P3356 火星探测题解
    part1费用流建图比较显然,把车的数量当成流量,把捡到的石头数量当成费用。然后跑最大费用最大流。因为费用是针对点而不是边,所以要拆点,每个点分为入点和出点。对于向下走,向右走建边:从起点的出点向终点的入点连边,容量为\(inf\),费用为\(0\)。对于每一个格子,如果当前格子是石头......
  • P3355 骑士共存问题题解
    题目链接:P3355骑士共存问题-洛谷|计算机科学教育新生态(luogu.com.cn)题解:棋盘问题考虑黑白染色成为二分图后做。观察马的性质,可知一个点只能到一个异色点,所以,构造方案可以先将所有同色点放上马,再考虑有那些异色点不可以放置。方法一:网络流,时间复杂度为O(|E|min(|E|0.5......
  • 【线段树入门】P3353 在你窗外闪耀的星星(区间求和)
    这题正解是前缀和,我用线段树练练手><11//笔记-自用22//#pragmaGCCoptimize("Ofast")33//#pragmaGCCoptimize("unroll-loops")44#define_CRT_SECURE_NO_WARNINGS55#defineAll(a)a.begin(),a.end()66#defineINF214748364777......
  • P3352 [ZJOI2016] 线段树 思考--zhengjun
    有一个显然的\(O(n^3q)\)的做法:设\(f_{i,l,r,x}\)表示\(i\)次操作过后,区间\([l,r]\)的数\(\lex\),\(a_{l-1},a_{r+1}>x\)的方案数。转移:$$f_{i,l,r,x}=f_{i-1,l,r,x}\timesg_{l,r}+\sum\limits_{j<l}f_{i-1,j,r,x}\times(j-1)+\sum\limits_{j>r}f_{i-1,l......
  • COMP3350 业务智能
    Assignment2–BusinessIntelligenceSemester1,2023DueDateApr24th5pmAssignment2isdueonApr24th5pm.Eachgroupwill•uploadtheassignmentfilestoCanvasand•presentyourBIreportanddemonstrateyourassignmentontutorialsessiononApr25th......