Pagini recente » Cod sursa (job #3295365) | Cod sursa (job #837256) | Istoria paginii runda/eusebiuoji2005cls9/clasament | Cod sursa (job #2333310) | Cod sursa (job #1786555)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 50001
#define INF 0x3f3f3f3f
int N, M, i, x, y, c;
int D[NMAX];
vector <pair <int, int > > G[NMAX];
vector <pair <int, int > >::iterator it;
struct comp
{
bool operator () (const int &x, const int &y)
{
return D[x] > D[y];
}
};
priority_queue <int, vector <int>, comp> Q;
void Dijsktra ( int x)
{
memset(D, INF, NMAX);
D[x] = 0;
Q.push(x);
while (!Q.empty())
{
int y = Q.top();
Q.pop();
for (it = G[y].begin(); it != G[y].end(); ++it)
if (D[(*it).first] > D[y] + (*it).second)
{
D[(*it).first] = D[y] + (*it).second;
Q.push((*it).first);
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d\n", &N, &M);
for (i=1;i <= M; i++)
{
scanf("%d%d%d", &x, &y, &c);
G[x].push_back(make_pair(y,c));
}
Dijsktra(1);
for (i = 2; i <= N; i++)
if (D[i] != INF)
printf("%d ", D[i]);
else
printf("0 ");
return 0;
}