Pagini recente » Cod sursa (job #322278) | Cod sursa (job #3269137) | Cod sursa (job #1768916) | Cod sursa (job #81568) | Cod sursa (job #2085790)
#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});
}
dijkstra(1);
for(i=2;i<=n;i++)
if(dist[i]!=2000000000)
printf("%d ",dist[i]);
else printf("0 ");
return 0;
}