#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10, INF = 0x3f3f3f3f; int n, m, dis[N], h[N], idx; bool vis[N]; struct edge { int n, t, l; edge(){} edge(int tt, int ll, int nn) { n = nn, t = tt, l = ll; } }e[N]; void addEdge(int ff, int tt, int ll) { e[idx] = edge(tt, ll, h[ff]); h[ff] = idx ++ ; } int spfa() { memset(dis, 0x3f, sizeof dis); queue<int> q; dis[1] = 0; q.push(1); vis[1] = true; while(!q.empty()) { int f = q.front(); q.pop(); vis[f] = false; for(int i = h[f]; ~i; i = e[i].n) { int t = e[i].t, l = e[i].l; if(dis[t] > dis[f] + l) { dis[t] = dis[f] + l; if(!vis[t]) { q.push(t); vis[t] = true; } } } } if(dis[n] > INF / 2) return INF; return dis[n]; } int main() { memset(h, -1, sizeof h); cin >> n >> m; for(int i = 0; i < m; i ++ ) { int f, t, l; cin >> f >> t >> l; addEdge(f, t, l); } int temp = spfa(); if(temp == INF) puts("impossible"); else cout << temp << endl; return 0; }
标签:int,ll,vis,spfa,edge,dis From: https://www.cnblogs.com/leyuo/p/16644383.html