河南萌新联赛2024第(三)场:河南大学 I - 游戏

河南萌新联赛2024第(三)场:河南大学 I - 游戏

无向图最小花费路径问题

给定一个无向图,包含n个节点和m条边。每条边有一个通过的花费,并且附带一个状态信息:

  • 状态为0:表示该边当前处于锁定状态,暂时不可通过。
  • 状态为1:表示该边可以通行。

特别地,在节点k处藏有一把钥匙,一旦取得这把钥匙,就可以解锁所有状态为0的边,使其变为可通行状态。

目标:从节点1出发,找到一条到达节点n的路径,使得这条路径上的总花费最小。

输入描述:

第一行三个整数 n , m , k n,m,k n,m,k ,分别表示节点数,边数,钥匙所在节点

接下来 m m m 行,每行四个整数 a i , b i , c i , d i a_i ,b_i ,c_i ,d_i ai,bi,ci,di​,表示 到 b_i之间存在一条无向边,通过该边花费 c i c_i ci,其状态为 d i d_i di,取值仅为 0 或 1

输出描述:

输出节点 1 到 n 的最小花费,如果无法到达,输出 −1

输入
cpp 复制代码
6 10 5
1 2 1 1
2 4 9 1
4 5 4 1
1 3 9 1
3 6 8 0
4 6 6 0
4 5 1 0
5 6 10 0
5 6 5 0
5 6 6 1
输出
cpp 复制代码
19
输入
cpp 复制代码
6 10 5
1 6 4 1
6 3 9 1
3 5 8 1
1 2 10 0
3 4 2 1
4 5 2 0
3 4 5 1
3 6 6 1
5 6 1 0
3 5 10 1
输出
cpp 复制代码
4
  • n n n 的取值范围: 1 ≤ n ≤ 2 × 1 0 5 1 \leq n \leq 2 \times 10^5 1≤n≤2×105
  • m m m 的取值范围: 0 ≤ m ≤ 1 0 5 0 \leq m \leq 10^5 0≤m≤105
  • k , a i , b i k, ai, bi k,ai,bi 的取值范围: 1 ≤ k , a i , b i ≤ n 1 \leq k, ai, bi \leq n 1≤k,ai,bi≤n
  • c i ci ci 的取值范围: 1 ≤ c i ≤ 2 × 1 0 5 1 \leq ci \leq 2 \times 10^5 1≤ci≤2×105
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
typedef tuple<LL, int, int> tup;

signed main()
{
	int n, m, k;
	cin >> n >> m >> k;
	vector<vector<tup>> g(n + 1);
	while (m--)
	{
		int a, b, c, d;
		cin >> a >> b >> c >> d;
		g[a].push_back({b, c, d});
		g[b].push_back({a, c, d});
	}
	vector<vector<LL>> dis(n + 1, vector<LL>(2, 1e11));
	priority_queue<tup, vector<tup>, greater<tup>> Q;
	Q.push({0, 1, k == 1});
	while (!Q.empty())
	{
		auto [distance, u, ok] = Q.top();
		Q.pop();
		if (dis[u][ok] != 1e11) continue;
		dis[u][ok] = distance;
		for (auto [v, w, x] : g[u])
		{
			int is_k = ok == 1 || v == k;
			if (x == 1 || ok) Q.push({distance + w, v, is_k});
		}
	}
	LL ans = min(dis[n][0], dis[n][1]);
	if (ans == 1e11) ans = -1;
	cout << ans << "\n";
	return 0;
}
相关推荐
爱喝雪碧的可乐21 分钟前
2026 腾讯广告算法大赛优秀方案启示:行为条件化多模态自回归生成推荐摘要
算法·数据挖掘·回归·推荐系统·推荐算法
碧海银沙音频科技研究院21 分钟前
音箱在加入 NN AEC(神经网络声学回声消除) 后出现反复重启问题解决
人工智能·深度学习·算法
叼烟扛炮2 小时前
C++ 知识点18 内部类
开发语言·c++·算法·内部类
YOGOD有神2 小时前
用AI自动从谷歌地图抓取海外客户,我跑了一次7小时的任务,结果出乎意料
算法
汉克老师2 小时前
GESP5级C++考试语法知识(十五、分治算法(二))
c++·算法·排序算法·分治算法·gesp5级·gesp五级
快瞳科技2 小时前
小样本学习在珍稀鸟类识别中的突破:仅需5张图,让AI认识濒危物种
算法
汉克老师2 小时前
GESP6级C++考试语法知识(五、格雷码)
c++·算法·位运算·异或·gesp6级·gesp六级·格雷码
Ulyanov2 小时前
《从质点到位姿:基于Python与PyVista的导弹制导控制全栈仿真》: 可视化革命——基于 PyVista 的 3D 战场构建与实时渲染
开发语言·python·算法·3d·系统仿真
,,?!,2 小时前
数据结构算法-排序算法
数据结构·算法·排序算法
小白编程锤炼3 小时前
深入解析:质量门禁
人工智能·算法·架构·vibe-coding