Pagini recente » Cod sursa (job #2353640) | Rating alexandru catana (revup) | Cod sursa (job #1392989) | Cod sursa (job #315768) | Cod sursa (job #2085779)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int dist[50002],n,m;
vector < pair<int,int> > g[50002];
priority_queue < pair<int,int> > heap;
void dijkstra(int start)
{
int node,cost,son,costs,i,l;
for(i=1;i<=n;i++)
dist[i]=2000000000;
dist[start]=1;
heap.push({0,start});
while(!heap.empty())
{
cost=-heap.top().first;
node=heap.top().second;
heap.pop();
if(cost<=dist[node])
{
l=g[node].size();
for(i=0;i<l;i++)
{
costs=g[node][i].first;
son=g[node][i].second;
if(dist[son]>cost+costs)
{dist[son]=cost+costs;
heap.push({-dist[son],son});}
}
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int i,a,b,c;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
g[a].push_back({c,b});
g[b].push_back({c,a});
}
dijkstra(1);
for(i=2;i<=n;i++)
printf("%d ",dist[i]);
return 0;
}