Pagini recente » Cod sursa (job #2463374) | Cod sursa (job #2382193) | Cod sursa (job #3191628) | Cod sursa (job #1653882) | Cod sursa (job #1517356)
#include <fstream>
#include <vector>
#include <set>
#include <cstring>
using namespace std;
#define MN 50005
#define pb push_back
#define mp make_pair
#define INF 1000000000
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m;
int d[MN];
vector <int> G[MN];
vector <int> C[MN];
set< pair<int, int> > T;
void Rez()
{
int i, val, x;
for (i = 2; i <= n; i++)
d[i] = INF;
T.insert(mp(0, 1));
while (T.size() > 0)
{
val = (*T.begin()).first;
x = (*T.begin()).second;
T.erase(*T.begin());
int l = G[x].size();
for (i = 0; i < l; i++)
if (d[G[x][i]] > val + C[x][i])
{
d[G[x][i]] = val + C[x][i];
T.insert(mp(d[G[x][i]], G[x][i]));
}
}
}
int main()
{
int i, a, b, c;
fin >> n >> m;
for (i = 1; i <= m; i++)
{
fin >> a >> b >> c;
G[a].pb(b);
C[a].pb(c);
}
Rez();
for (i = 2; i <= n; i++)
fout << (d[i] == INF ? 0 : d[i]) << " ";
return 0;
}