首页 > 其他分享 >【牛客】-E 小红勇闯地下城

【牛客】-E 小红勇闯地下城

时间:2024-03-12 18:32:35浏览次数:22  
标签:10 vis int 牛客 vv 勇闯 uu 地下城 dis

一语点醒雾中人:看出最短路问题(dijkstra)

ACocde:

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

int dx[5] = {0, -1, 0, 1, 0};
int dy[5] = {0, 0, 1, 0, -1};
struct E {
	int w;
	int x, y;
	bool operator<(const E &u) const {
		return w > u.w;
	}
};
int n, m, h;
int u, v, uu, vv;

void solve() {

	cin >> n >> m >> h;
	char mp[n + 10][m + 10];
	int dis[n + 10][m + 10];
	bool vis[n + 10][m + 10];
	memset(dis, 0x3f, sizeof(dis));
	memset(vis, false, sizeof(vis));
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			cin >> mp[i][j];
			if (mp[i][j] == 'T')uu = i, vv = j;
			if (mp[i][j] == 'S')u = i, v = j;
		}

	priority_queue<E> q;
	q.push({0, u, v});
	dis[u][v] = 0;

	while (!q.empty()) {
		E t = q.top();
		int x = t.x, y = t.y;
		int w = t.w;
		q.pop();
		if (vis[x][y])
			continue;
		vis[x][y] = 1;
		for (int g = 1; g <= 4; g++) {
			int i = x + dx[g], j = y + dy[g];
			if (i > n || i < 1 || j > m || j < 1)	continue;
			if (i == uu && j == vv) {
				dis[uu][vv] = min(dis[uu][vv], dis[x][y]);
			}
			int ww = w + mp[i][j] - '0';
			if (ww < dis[i][j]) {
				dis[i][j] = ww;
				q.push({ww, i, j});
			}
		}
	}
	if (dis[uu][vv] < h)
		cout << "Yes\n";
	else
		cout << "No\n";
}
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int tt=1;
	cin>>tt;
	while(tt--)	{
		solve();
	}
	return 0;
}

标签:10,vis,int,牛客,vv,勇闯,uu,地下城,dis
From: https://blog.csdn.net/m0_74969835/article/details/136631566

相关文章

  • [牛客]小红走矩阵
    题目思路直接套bfs模板代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=1e3+5,INF=0x3f3f3f3f;structNode{ intx,y,s;}t,t1;chargraph[N][N];boolvis[N][N];queue<Node>q;intdx[4]={0,0,1,1};intdy[4]={-1,1,0......
  • 牛客周赛 Round 36(A~F)
    A签到直接\(/1000\)输出即可#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#define_for(i,a,b)for(inti=(a);i<(b);++i)#definepiipai......
  • 牛客周赛 Round 36 (小白练习记)
    A.小红的数位删除思路:这题简单输出即可Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;cin>>s;for(inti=0;i<s.size()-3;i++){cout<<s[i];}return0;}B.小红的小红矩阵构造思路:......
  • 牛客小白月赛88D
    不是很裸的01背包但是被卡了半天,所以记一下思路(?)对环的计算一般是从0-n-1,这样子转完一圈%n原位置就还是0,方便计算。然后二维dp,第一维表示第几次,第二维表示多少度。 #include<iostream>usingnamespacestd;intn,m;inta[5010];intf[5010][5010];intmain(){cin>......
  • 牛客小白月赛88补题D
    D-我不是大富翁题意:做法:一开始是往贪心方面想,但是很明显,贪不了。又因为走的步先后顺序没影响,可以用dp来写。暴力也差不多。值得注意的点是动力序列可以一边读入一边处理,省了点空间。如果dp[5005][5005]这样开的话会MLE,实际上在dp的过程中,用到的只是i和i-1两行,其余都是多余的。......
  • 牛客小白月赛88 (小白来了)
    A.超级闪光牛可乐思路:n个不同名称第i种提高Wi的诱惑值,之和不小于x就可以捕捉零食不超过1000个超过输出-1不超过输出字符串即可看一眼数据你会发现根本不需要考虑因为Wi的最小值是1所有直接输出任意的即可所有你只要一个ch即可后面直接输出即可不用管其他的Code:#includ......
  • 2023牛客暑期多校训练营2 B Link with Railway Company
    ProblemDescription给你一个\(n\)个节点的树状铁路网络,维护一条边每天需要花费\(c_i\)代价。现在有\(m\)条从\(a_i\)到\(b_i\),每天的盈利为\(x_i\),维护花费为\(y_i\)的路线可以运营。你可以选择一部分路线运营,求每日的最大收益。Input第一行输入两个整数\(n,......
  • 2024牛客寒假算法基础集训营3
    A-智乃与瞩目狸猫、幸运水母、月宫龙虾#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingi128=__int128;usingldb=longdouble;#defineinti64usingvi=vector<int>;usingpii=pair<int,int>;usingv......
  • 牛客周赛round35
    https://ac.nowcoder.com/acm/contest/76133总结:赛时由于思考问题不清晰(体现在FG),感觉仔细思考一会就不行了,侥幸过了最短路的构造题,写的时候也是不顺利,构造也确实没怎么练过。E题:就是个给你从1出发的最短路的结果,要求你给出图的构造,这种反向题目还真没仔细思考过。此外特殊的......
  • 牛客周赛 Round 35
    牛客周赛Round35比赛链接小红的字符串切割思路一遍循环遍历就可以了,到中间位置时候输出一个换行符Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineall(x)x.begin()+1,x.end()#definect(x)cout<<x<<endlvoidsolve(){ strings;......