SP34012 ADRABR - Adrita and Her Bike Ride 题解
题意
给出一个无向图,每条边的权值为
思路
最短路模板题,套用 dijkstra
模板即可。
注意事项
-
建双向边。
-
记得清空数组。
代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
#define me0(a); memset(a, 0, sizeof a);
#define me3(a); memset(a, 0x3f, sizeof a);
#define PII pair<int, int>
#define il inline
const int INF = 0x3f3f3f3f, MOD = 1e9 + 7;
il void read(int &n)
{
bool w = 0;
char c = getchar();
for (; c < 48 || c > 57; c = getchar())
w = c == 45;
for (n = 0; c >= 48 && c <= 57; c = getchar())
n = n * 10 + c - 48;
n = w ? -n : n;
}
il void write(int x, char a)
{
char c[40], s = 0;
if (x < 0) putchar(45), x = -x;
for (; x ;) c[s ++] = x % 10, x /= 10;
if (!s) putchar(48);
for (; s -- ;) putchar(c[s] + 48);
putchar(a);
}
const int MAXN = 1000010;
int dist[MAXN];
bool vis[MAXN];
int n, m, s, t;
struct EDGE {int son, val;} edge;
vector<EDGE>V[MAXN];
inline void add(int x, int y, int z) {V[x].push_back({y, z});}
struct node {
int dist, pos;
bool operator<(const node&x)const {return x.dist < dist;}
};
il void dij(int s) {
me0(vis); me3(dist);
dist[s] = 0;
priority_queue<node> q;
q.push((node) {0, s});
for (; !q.empty();) {
node tmp = q.top();
q.pop();
int x = tmp.pos;
if (vis[x]) continue;
vis[x] = 1;
for (auto i : V[x]) {
int y = i.son, z = i.val;
if (dist[y] > dist[x] + z) {
dist[y] = dist[x] + z;
if (!vis[y]) q.push((node) {dist[y], y});
}
}
}
}
main()
{
int Q;
read(Q);
for (; Q; --Q)
{
read(n); read(m); read(s); read(t);
rep(i, 1, m)
{
int x, y, val;
read(x); read(y); read(val);
val += 12;
add(x, y, val); add(y, x, val);
}
dij(s);
write(dist[t], '\n');
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步