洛谷 P1339 [USACO09OCT]热浪Heat Wave(最短路)

时间:2022-02-08 10:18:53

嗯...

题目链接:https://www.luogu.org/problem/P1339

这道题是水的不能在水的裸最短路问题...这里用的dijkstra

但是自己进了一个坑——

  因为有些城市之间可能还没有道路,自己只是将其初始化为0,而应该初始化为0x3f3f,从而表示两个城市之间没有道路...

AC代码:

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring> using namespace std;
const int inf = 0x3f3f;
int n, c, ts, te, dis[], vis[], g[][]; inline void dijkstra(int x){
for(int i = ; i <= n; i++) dis[i] = (i == x ? : inf);
for(int i = ; i <= n; i++){
int t = , y = inf;
for(int j = ; j <= n; j++) if(!vis[j] && dis[j] <= y) y = dis[t = j];
vis[t] = ;
for(int j = ; j <= n; j++) dis[j] = min(dis[j], dis[t] + g[t][j]);
}
} int main(){
memset(g, 0x3f3f, sizeof(g));//初始化!!
scanf("%d%d%d%d", &n, &c, &ts, &te);
for(int i = ; i <= c; i++){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
g[u][v] = g[v][u] = w;
}
dijkstra(ts);
printf("%d", dis[te]);
return ;
}

AC代码