Pagini recente » Cod sursa (job #343280) | Cod sursa (job #2108515) | Cod sursa (job #880508) | Cod sursa (job #1858755) | Cod sursa (job #2275548)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=5e4+5;
int N, M, i, j, X, Y, C, Sol[NMAX], nod, cnt;
bool Sel[NMAX];
vector <pair< int, int> > G[NMAX];
priority_queue <pair<int, int>, vector<pair<int, int> >, greater<pair<int, int > > > H;
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &N, &M);
for(i=1; i<=M; i++)
{
scanf("%d%d%d", &X, &Y, &C);
G[X].push_back({Y, C});
}
for(i=2; i<=N; i++)
Sol[i]=-1;
Sel[1]=true;
for(i=0; i<G[1].size(); i++)
{
H.push({G[1][i].second, G[1][i].first});
Sol[G[1][i].first]=G[1][i].second;
}
cnt=G[1].size();
while(cnt)
{
while(Sel[H.top().second]==true)
H.pop();
nod=H.top().second;
Sel[nod]=true;
H.pop();
cnt--;
///c == nod
for(i=0; i<G[nod].size(); i++)
{
j=G[nod][i].first;
if(Sol[j]==-1)
{
cnt++;
H.push({Sol[nod]+G[nod][i].second, j});
Sol[j]=Sol[nod]+G[nod][i].second;
}
else
{
if(Sol[j] > Sol[nod]+G[nod][i].second)
{
H.push({Sol[nod]+G[nod][i].second, j});
Sol[j]=Sol[nod]+G[nod][i].second;
}
}
}
}
for(i=2; i<=N; i++)
if(Sol[i]!=-1)
printf("%d ", Sol[i]);
else printf("%d ", 0);
printf("\n");
return 0;
}