Pagini recente » Cod sursa (job #57123) | Cod sursa (job #1622437) | Cod sursa (job #1620711) | Cod sursa (job #586161) | Cod sursa (job #1735363)
#include <cstdio>
#include <vector>
#include <set>
#define MAX 50005
#define INF 1 << 30
using namespace std;
int n, m, d[MAX];
vector<pair <int, int> > v[MAX];
void read();
void solve();
void write();
int main()
{
read();
solve();
write();
return 0;
}
void read()
{
freopen ("dijkstra.in", "r", stdin);
scanf ("%d%d", &n, &m);
for (int i = 2; i <= n; ++i)
d[i] = INF; d[1] = 0;
for(int i = 1; i <= n; ++i)
{
int x, y, z;
scanf ("%d %d %d", &x, &y, &z);
v[x].push_back(make_pair(y, z));
}
fclose(stdout);
}
void solve()
{
set <pair <int, int> > s;
s.insert (make_pair(0, 1));
while (!s.empty())
{
int node = s.begin()-> second;
int value = s.begin()-> first;
s.erase(s.begin());
for (unsigned int i = 0; i < v[node].size(); ++i)
if (d[v[node][i].first] > v[node][i].second + value){
d[v[node][i].first] = v[node][i].second + value;
s.insert(make_pair(d[v[node][i].first], v[node][i].first));
}
}
}
void write()
{
freopen ("dijkstra.out", "w", stdout);
for (int i = 2; i <= n; ++i)
if (d[i] == INF)
printf ("0 ");
else printf ("%d ", d[i]);
printf ("\n");
fclose(stdout);
}