Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #838406) | Cod sursa (job #177925) | Cod sursa (job #1446560)
#include <iostream>
#include <fstream>
#include <vector>
#define INF 12345678
using namespace std;
ifstream fin("Dijkstra.in");
ofstream fout("Dijkstra.out");
vector <int> a[50001];
vector <int> b[50001];
int d[50001], q[50001];
int n;
void Dijkstra(int st)
{
for (int i = 2; i <= n; i++)
d[i] = INF;
int mi, pmi = 0;
for (int i = 1; i <= n; i++)
{
mi = INF;
for (int j = 1; j <= n; j++)
if (d[j] < mi && !q[j])
{
pmi = j;
mi = d[j];
}
q[pmi] = 1;
int t = 0;
int D = a[pmi].size();
while (t < D)
{
if (d[a[pmi][t]] > d[pmi] + b[pmi][t])
d[a[pmi][t]] = d[pmi] + b[pmi][t];
t++;
}
}
}
int main()
{
int i, m, x, y, z;
fin >> n >> m;
for (i = 1; i <= n; i++)
{
fin >> x >> y >> z;
a[x].push_back(y);
b[x].push_back(z);
}
Dijkstra(1);
for (i = 2; i <= n; i++)
fout << (d[i] == INF ? 0 : d[i]) << " ";
fout << "\n";
return 0;
}