Pagini recente » Cod sursa (job #3148375) | Cod sursa (job #2679267) | Cod sursa (job #839512) | Cod sursa (job #1630103) | Cod sursa (job #2115715)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <set>
using namespace std;
int INF=0x3f3f3f3f;
vector <pair<int,int>> g[50001];
int d[50001];
int n,m;
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d", &n,&m);
int a,b,c;
for(int i=0;i<m;++i)
scanf("\n%d %d %d", &a,&b,&c),
g[a-1].push_back({b-1,c});
memset(d,INF,sizeof d);
set<pair<int,int>> q;
q.insert({0,0});
d[0]=0;
while(!q.empty())
{
a=q.begin()->second;
q.erase(q.begin());
for(pair<int,int> i: g[a])
{
b=i.first;
c=i.second;
if(d[b]>d[a]+c)
{
if(d[b]!=INF)
q.erase(q.find({d[b],b}));
d[b]=d[a]+c;
q.insert({d[b],b});
}
}
}
for(int i=1;i<n;++i)
{
if(d[i]!=INF)
printf("%d ", d[i]);
else
printf("0 ");
}
return 0;
}