Pagini recente » Cod sursa (job #1089813) | Cod sursa (job #731107) | Cod sursa (job #1002530) | Cod sursa (job #2786973) | Cod sursa (job #2897626)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
const int NMAX = 2e5+5;
ll dist[NMAX];
vector <pair <int, int> > G[NMAX];
void solve(){
int n, m;
scanf("%d%d", &n, &m);
int u, v, c;
for(int i=0; i<m; ++i){
scanf("%d %d %d", &u, &v, &c);
G[u].push_back({v, c});
}
for(int i=0; i<=n; ++i)
dist[i] = -1;
priority_queue <pair <int,int> > pq;
pq.push({0, 1});
while(!pq.empty()){
int u = pq.top().second;
int d = -pq.top().first;
pq.pop();
if(dist[u] != -1)
continue;
dist[u] = d;
for(auto &e: G[u]){
int v = e.first;
int c = e.second;
pq.push({-c-d, v});
}
}
for(int i=2; i<=n; ++i)
printf("%lld ", dist[i] != -1 ? dist[i] : 0);
printf("\n");
}
int main(){
int t = 1;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
for(int i=0; i<t; ++i){
/* printf("Case #%d: ", i+1); */
solve();
}
return 0;
}