Pagini recente » Cod sursa (job #515411) | Cod sursa (job #2832900) | Istoria paginii runda/ziua_recursivitatii/clasament | Cod sursa (job #2026608) | Cod sursa (job #1920674)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#include <set>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define N 50005
set < pair <int, int > > T; ///heap
vector < int > L[N], C[N]; ///Lista de adiacenta + Lista de costuri
int d[N]; ///vector de distante a costurilor, luam tot ce e mai avantajos
int n, m;
void Citire()
{
fin >> n >> m;
int c, x, y;
for(int i = 1; i <= m; i++)
{
fin >> x >> y >> c;
L[x].push_back(y);
C[x].push_back(c);
}
fin.close();
}
void Dijkstra(int k)
{
int val, x;
T.insert(make_pair(0, 1));
for(int i = 2; i <= n; i++)
d[i] = INT_MAX;
while(T.size() > 0)
{
val = (*T.begin()).first;
x = (*T.begin()).second;
T.erase(*T.begin());
for(int i = 0; i < L[x].size(); i++)
if(d[L[x][i]] > val + C[x][i])
{
d[L[x][i]] = val + C[x][i];
T.insert(make_pair(d[L[x][i]], L[x][i]));
}
}
for(int i = 2; i <= n; i++)
if(d[i] == INT_MAX)
fout << 0 << " ";
else
fout << d[i] << " ";
fout << "\n";
}
int main()
{
Citire();
Dijkstra(1);
return 0;
}