Pagini recente » Cod sursa (job #1972632) | Cod sursa (job #1994789) | Cod sursa (job #3150831) | Cod sursa (job #2485871) | Cod sursa (job #1383587)
#include <fstream>
#include <vector>
#include <cstring>
#include <set>
#define Max_Size 50010
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
typedef pair < int, int > NOD;
int N, M, D[Max_Size];
vector < NOD > V[Max_Size];
multiset < NOD > Heap;
int main()
{
fin >> N >> M;
for (int i = 1, x, y, c; i <= M; i++)
{
fin >> x >> y >> c;
V[x].push_back(make_pair(c, y));
}
for (int i = 1; i <= N; i++) D[i] = 100000000;
//memset(D, , sizeof(D));
D[1] = 0;
Heap.insert( {0, 1} );
while (!Heap.empty())
{
NOD nod = *Heap.begin();
Heap.erase(nod);
for (vector < NOD > :: iterator it = V[nod.second].begin(); it != V[nod.second].end(); it++)
{
if (D[it->second] > it->first + D[nod.second])
{
Heap.erase(make_pair(D[it->second], it->second));
D[it->second] = it->first + D[nod.second];
Heap.insert(make_pair(D[it->second], it->second));
}
}
}
for (int i = 2; i <= N; i++)
{
fout << (D[i] != 100000000 ? D[i] : 0) << ' ';
}
fout << '\n';
fout.close();
return 0;
}