Pagini recente » Cod sursa (job #1659930) | Cod sursa (job #1712570) | Cod sursa (job #1209935) | Cod sursa (job #2811316) | Cod sursa (job #1072437)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#define inf ~(1 << 31)
using namespace std;
int n, m;
int minim[50010];
struct vecin
{
int v, dist;
vecin(int v = 0, int dist = 0):v(v), dist(dist)
{
}
};
struct cmp
{
bool operator()(int x, int y)
{
return minim[x] > minim[y];
}
};
vector<vecin> graf[50010];
priority_queue<int, vector<int>, cmp> q;
void citire()
{
scanf("%d%d", &n, &m);
int x, y, d;
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &x, &y, &d);
graf[x].push_back(vecin(y, d));
}
for(int i = 2; i <= n; i++)
minim[i] = inf;
}
void rezolvare()
{
q.push(1);
int p, t, v, i;
while(!q.empty())
{
p = q.top();
q.pop();
for(i = 0; i < graf[p].size(); i++)
{
v = graf[p][i].v;
t = minim[p] + graf[p][i].dist;
if(t < minim[v])
{
minim[v] = t;
q.push(v);
}
}
}
}
void afisare()
{
for(int i = 2; i <= n; i++)
{
if(minim[i] == inf)
printf("0 ");
else printf("%d ", minim[i]);
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w", stdout);
citire();
rezolvare();
afisare();
return 0;
}