首页 > 其他分享 >CF35C. Fire Again 题解 bfs求最短路

CF35C. Fire Again 题解 bfs求最短路

时间:2024-10-24 17:42:25浏览次数:1  
标签:Again Fire 题解 int que && ans maxn dis

题目链接:https://codeforces.com/problemset/problem/35/C

视频讲解:https://www.bilibili.com/video/BV1tZ1FYPELp/?p=4

以每个着火的点为起点求最短路,然后输出任意一个距离值最大的点即可。

需要注意的是:本题是文件输入输出。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2020;

int n, m, k, dis[maxn][maxn], ans; // ans 表示 dis[x][y] 最大值 

struct Node {
	int x, y;
};

int dir[4][2] = { -1, 0, 1, 0, 0, -1, 0, 1 };

bool in_map(int x, int y) {
	return x >= 1 && x <= n && y >= 1 && y <= m;
}

int main() {
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	
	cin >> n >> m >> k;
	memset(dis, -1, sizeof dis);
	queue<Node> que;
	while (k--) {
		int x, y;
		cin >> x >> y;
		dis[x][y] = 0;
		que.push({x, y});
	}
	while (!que.empty()) {
		Node u = que.front();
		que.pop();
		for (int i = 0; i < 4; i++) {
			int x = u.x + dir[i][0],
				y = u.y + dir[i][1];
			if (in_map(x, y) && dis[x][y] == -1) {
				dis[x][y] = dis[u.x][u.y] + 1;
				que.push({x, y});
				ans = max(ans, dis[x][y]);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (dis[i][j] == ans) {
				cout << i << " " << j << endl;
				return 0;
			}
		}
	}
	return 0;
}

标签:Again,Fire,题解,int,que,&&,ans,maxn,dis
From: https://www.cnblogs.com/quanjun/p/18500051

相关文章

  • CF1139C. Edgy Trees 题解 并查集
    题目链接:https://codeforces.com/problemset/problem/1139/C视频讲解:https://www.bilibili.com/video/BV1tZ1FYPELp?p=3我们可以求总方案数-不满足条件的方案数。设一个不包含黑色边的极大连通块的大小为\(sz_i\)。则答案为\[n^k-\sum\{sz_i^k\}\]示例程序:#include......
  • CF1800E2. Unforgivable Curse (hard version) 题解 并查集
    题目链接:https://codeforces.com/contest/1800/problem/E2视频讲解:https://www.bilibili.com/video/BV1tZ1FYPELp?p=2把下标\(i\)对应到图中编号为\(i\)的节点。节点\(i\)和\(i+k\)之间连一条边,节点\(i\)和\(i+k+1\)之间也连一条边。同一个连通块里的节点对应的字......
  • P5661 [CSP-J2019] 公交换乘 题解
    模拟"公交换乘"按题意模拟即可.注意:可以使用结构体,但是超过时间的优惠券需要被忽略.代码#include<iostream>#include<cstdio>usingnamespacestd;structnode{ intprice,deadline,is_use;//价格,截止时间,是否使用过}a[100005];intn,p,ans,pos=1;int......
  • P5662 [CSP-J2019] 纪念品 题解
    背包因为小伟可以每天进行$2$种操作无限次,所以显然可以使用完全背包.定义状态$f_i$,表示还剩下$i$时,可以拿到钱的最大值.再假设小伟今天买了,明天就卖掉.状态转移方程如下:$f_i=max(f_i,f_{i-p_{k,i}}+p_{k+1,i}-p_{k,i}).$即今天花掉的钱+明天能拿的钱-今天花掉的......
  • P5663 [CSP-J2019] 加工零件 题解
    最短路对于上图,如果我们相知道$2$号工人想要一个$3$阶段的零件,其实是看$2$到$1$有没有一条长度为$3$的路径.但如果要求$4$阶段的路径,那就不一定了.所以我们直接求一遍最短路,分奇最短路和偶最短路.处理完后,最后一次$\Theta(1)$的回答,如果路径长度过大,就是$No$,......
  • Nginx的 MIME TYPE问题导致的mjs文件加载出错的问题解决
    .mjs文件:明确表示使用ES6模块系统(ECMAScriptModules)。 在服务器用Nginx部署前端项目后,出现下面这种问题Failedtoloadmodulescript:ExpectedaJavaScriptmodulescriptbuttheserverrespondedwithaMIMEtypeof"application/octet-stream".StrictMIMEt......
  • P1668 USACO04DEC Cleaning Shifts S 题解
    P1668USACO04DECCleaningShiftsS-洛谷分析这道题最快的做法应该是贪心,但是线段树优化DP也可以做。首先看到此题,可以想到一个很暴力的区间DP:\(f[i][j]\)表示在\([i,j]\)时段内最少需要的奶牛数量。对于每头牛的空闲时段\([l,r]\),其每个子区间答案均为\(1\);对于......
  • AtCoder Snuke21 J. Drink Bar 部分分题解
    这里将每一个三元组\((a_i,b_i,c_i)\)称为一组数。Subtask1暴力枚举所有的非空子集即可。枚举方式可以采用类似状压DP的二进制枚举或者直接DFS。时间复杂度\(O(N\times2^N)\)。Subtask2性质:此时的特征值最多由两个有效组组成,原因可见Subtask3。因为\(a_i=......
  • P7074 [CSP-J2020] 方格取数 题解
    动态规划dp方格取数类似于数字三角形,均可以使用动态规划直接秒杀.但此题有$3$个方向:上、右、下.所以可以定义一个三维数组dp数组.假设$f_{i,j,1}$是从右、上方到达$(i,j)$的和的最大值.又有$f_{i,j,0}$是从右、下方到达$(i,j)$的和的最大值.我们可以先确定......
  • P7912 [CSP-J 2021] 小熊的果篮 题解
    是模拟吗?其实是的,虽然$1\len\le2\times10^5$,但是队列是个好东西.我们定义一个结构体,来存放每一个块的信息,包括类型、起点、终点,将它们放入队列当中,再使用基于广搜的思想,先处理,再合并,所以需要用到$2$个队列.注意点数据中可能会有块的类型全是$1$,或者全是$0$的情况......