Pagini recente » Cod sursa (job #1952121) | Cod sursa (job #880350) | Cod sursa (job #2569695) | Cod sursa (job #3174235) | Cod sursa (job #220017)
Cod sursa(job #220017)
#include <cstdio>
#include <set>
#include <vector>
using namespace std;
#define fiu vec[nod][i]
const int MAX_N = 50010;
const int INF = 0x3f3f3f3f;
int n, m;
int f[MAX_N];
set < pair <int, int> > a;
vector <int> vec[MAX_N], cost[MAX_N];
int main()
{
int i, x, y, 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", &x, &y, &c);
vec[x].push_back(y);
cost[x].push_back(c);
}
memset(f, INF, sizeof(int) * (n + 2));
f[1] = 0;
a.insert(make_pair(0, 1));
while (!a.empty())
{
int nod = (*a.begin()).second;
a.erase(a.begin());
for (i = 0; i < vec[nod].size(); ++i)
if (f[fiu] > f[nod] + cost[nod][i])
{
f[fiu] = f[nod] + cost[nod][i];
a.insert(make_pair(f[fiu], fiu));
}
}
for (i = 2; i <= n; ++i) printf("%d ", (f[i] == INF) ? 0 : f[i]);
}