Pagini recente » Borderou de evaluare (job #2004422) | Borderou de evaluare (job #1963559) | Borderou de evaluare (job #1293949) | Borderou de evaluare (job #132283) | Cod sursa (job #1988940)
#include <bits/stdc++.h>
#define Nmax 50005
#define inf 1000000000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N, M;
vector < pair <int, int> > G[Nmax];
int i, j, c;
int D[Nmax];
priority_queue < pair <int, int>, vector < pair <int, int> >, greater < pair <int, int> > > Q;
int main()
{
fin >> N >> M;
while(M--)
{
fin >> i >> j >> c;
G[i].push_back(make_pair(c, j));
}
for(i = 1; i <= N; i++)
D[i] = inf;
Q.push(make_pair(0, 1));
while(!Q.empty())
{
int node = Q.top().second;
int cost = Q.top().first;
Q.pop();
if(D[node] > cost)
{
D[node] = cost;
for(auto it : G[node])
if(D[it.second] > D[node] + it.first)
Q.push(make_pair(D[node] + it.first, it.second));
}
}
for(i = 2; i <= N; i++)
fout << (D[i] == inf ? 0 : D[i]) << " ";
fout << "\n";
return 0;
}