Pagini recente » Cod sursa (job #318165) | Cod sursa (job #453588) | Cod sursa (job #786842) | Cod sursa (job #2629119) | Cod sursa (job #2696451)
// //
// O(m log n) //
// //
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <numeric>
#include <queue>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int INF = 100000000;
vector<pair<int, int> > graf[100005];
priority_queue<pair<int, int> > Q;
int d[100005];
int n,m,i,s;
int viz[100005];
void Dijkstra()
{
for(i=1;i<=n;i++)
{
d[i] = INF;
viz[i] = 0;
}
d[s] = 0;
Q.push({0, s});
while(!Q.empty())
{
int node = Q.top().second;
Q.pop();
if(!viz[node])
{
viz[node] = 1;
for (int i = 0; i < graf[node].size(); ++i)
{
int next = graf[node][i].first;
int cost = graf[node][i].second;
if (d[next] > d[node] + cost)
{
d[next] = d[node] + cost;
Q.push( {-d[next], next} );
}
}
}
}
}
int main()
{
in >> n >> m;
for(i=0;i<m;i++)
{
int x, y, cost;
in >> x >> y >> cost;
graf[x].push_back({y, cost});
}
s = 1;
Dijkstra();
for(i=s+1;i<=n;i++)
{
if(d[i] == INF)
out << 0 << " ";
else
out << d[i] << " ";
}
}