Pagini recente » Cod sursa (job #2630905) | Cod sursa (job #3292908) | Cod sursa (job #2963172) | Cod sursa (job #3240276) | Cod sursa (job #1378922)
#include<cstdio>
#include<queue>
#include<vector>
#define INF 1000000000
using namespace std;
struct st
{
int cost, x;
};
const int NMAX = 50000;
vector <st> v[NMAX + 1];
st aux;
priority_queue <pair <int, int> > pq;
int d[NMAX + 2];
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m, a, b, val;
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++)
{
scanf("%d%d%d", &a, &b, &val);
aux.cost = val;
aux.x = b;
v[a].push_back(aux);
}
for(int i = 2; i <= n; i++)
d[i] = INF;
int nod, c, c2, fiu, l;
pair <int, int> p;
p.first = 0;
p.second = 1;
pq.push(p);
while(!pq.empty())
{
p = pq.top();
pq.pop();
c = -p.first;
nod = p.second;
l = v[nod].size();
for(int i = 0; i < l; i++)
{
fiu = v[nod][i].x;
c2 = c + v[nod][i].cost;
if(c2 < d[fiu])
{
d[fiu] = c2;
pq.push(make_pair(-c2, fiu));
}
}
}
for(int i = 2; i <= n; i++)
{
if(d[i] == INF)
d[i] = 0;
printf("%d ",d[i]);
}
printf("\n");
return 0;
}