Pagini recente » Cod sursa (job #586747) | Cod sursa (job #3257113) | Cod sursa (job #417271) | Cod sursa (job #408893) | Cod sursa (job #857708)
Cod sursa(job #857708)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
#define maxn 50010
#define inf 1000000000
int n, m, nod, fiu, a, b, c, d[maxn], f[maxn];
vector<int> v[maxn], w[maxn];
vector<pair<int, int> > h;
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=m; ++i)
{
scanf("%d%d%d", &a, &b, &c);
v[a].push_back(b);
v[b].push_back(a);
w[a].push_back(c);
w[b].push_back(c);
}
h.push_back(make_pair(0, 1));
d[1]=0;
for(int i=2; i<=n; ++i)
d[i]=inf;
while(h.size()>0)
{
nod=h[0].second;
pop_heap(h.begin(), h.end());
h.pop_back();
if(f[nod])
continue;
f[nod]=1;
for(int i=0; i<v[nod].size(); ++i)
{
fiu=v[nod][i];
if(d[nod]+w[nod][i]<d[fiu])
{
d[fiu]=d[nod]+w[nod][i];
h.push_back(make_pair(-d[fiu], fiu));
push_heap(h.begin(), h.end());
}
}
}
for(int i=2; i<=n; ++i)
if(d[i]==inf)
printf("0 ");
else
printf("%d ", d[i]);
printf("\n");
return 0;
}