- 题解
单源最短路
- @ 2026-8-4 9:40:03
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5, mod = 1e9+7;
int a[N], n, m;
int d[N];
bool vis[N];
struct node{
int y, w;
bool operator < (const node a) const{
return w > a.w;
}
};
vector<node> g[N];
void dijkstra(int s){
memset(d, 0x3f, sizeof d);
priority_queue<node> q;
d[s] = 0;
q.push({s, 0});
while(!q.empty()){
node t = q.top();
int x = t.y;
q.pop();
if(vis[x]) continue;
vis[x] = true;
for(int i = 0; i < g[x].size(); i++){
int y = g[x][i].y, w = g[x][i].w;
if(vis[y]) continue;
if(d[y] > d[x] + w){
d[y] = d[x] + w;
q.push({y, d[y]});
}
}
}
}
signed main() {
cin >> n >> m;
for(int i = 1; i <= m; i++){
int x, y, w;
cin >> x >> y >> w;
g[x].push_back({y, w});
}
dijkstra(1);
if(d[n] != 0x3f3f3f3f)
cout << d[n];
else cout << -1;
return 0;
}
0 条评论
目前还没有评论...