Pagini recente » Cod sursa (job #2300062) | Cod sursa (job #106109) | Cod sursa (job #2486486) | Cod sursa (job #955260) | Cod sursa (job #2536283)
#include <bits/stdc++.h>
#define Nmax 10e8
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
typedef pair <int,int> pint;
priority_queue < pint,vector <pint>, greater<pint> > q;
int n,m,a,b,c;
int main()
{
in >> n >> m;
vector <pint> nodes[n+1];
vector <int> dp(n+1,Nmax);
vector <bool> viz(n+1);
for(int i = 1; i <= m; ++i)
{
in >> a >> b >> c;
nodes[a].push_back({c,b});
}
dp[1] = 0;
for(auto i : nodes[1])
{
q.push(i);
dp[i.second] = i.first;
}
viz[1] = 1;
while(!q.empty())
{
while(!q.empty() && viz[q.top().second])
q.pop();
if(!q.empty())
{
int node = q.top().second;
viz[node] = 1;
q.pop();
for(auto i : nodes[node])
{
int cost = i.first,newnode = i.second;
if(dp[node] + cost < dp[newnode])
{
dp[newnode] = dp[node] + cost;
q.push({dp[newnode],newnode});
}
}
}
}
for(int i = 2; i <= n; ++i)
{
(dp[i] == Nmax ? out << 0 : out << dp[i]);
out << " ";
}
return 0;
}