Pagini recente » Cod sursa (job #570241) | Cod sursa (job #1408405) | Cod sursa (job #1986315) | Cod sursa (job #590211) | Cod sursa (job #1794213)
#include <cstdio>
#include <queue>
#include <vector>
#define inf 2000000000
using namespace std;
struct Arc
{
Arc(int ca, int co) : catre(ca), cost(co) {}
int catre, cost;
inline bool operator<(const Arc& a) const
{
return cost > a.cost;
}
};
struct Nod
{
vector<Arc> v;
bool viz;
} v[50000];
int df[50000], n, m;
priority_queue<Arc> h;
int main()
{
int i, j, a, b, c;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 0; i < m; i++)
{
scanf("%d%d%d", &a, &b, &c);
a--; b--;
v[a].v.push_back(Arc(b, c));
}
for(i = 0; i < n; i++)
{
df[i] = inf;
}
df[0] = 0;
for(i = 0; i < v[0].v.size(); i++)
{
df[v[0].v[i].catre] = v[0].v[i].cost;
h.push(Arc(v[0].v[i].catre, v[0].v[i].cost));
}
while(!h.empty())
{
a = h.top().catre;
h.pop();
if(v[a].viz)
continue;
v[a].viz = true;
for(i = 0; i < v[a].v.size(); i++)
{
if(df[v[a].v[i].catre] > df[a] + v[a].v[i].cost)
{
df[v[a].v[i].catre] = df[a] + v[a].v[i].cost;
h.push(Arc(v[a].v[i].catre, df[v[a].v[i].catre]));
}
}
}
for(i = 1; i < n; i++)
if(df[i] == inf) printf("0 ");
else printf("%d ", df[i]);
return 0;
}