Pagini recente » Cod sursa (job #3122786) | Cod sursa (job #2320074) | Cod sursa (job #3175246) | Cod sursa (job #1835459) | Cod sursa (job #2736597)
#include <iostream>
#include <cstring>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define infi (1<<30)
#define f first
#define s second
vector <pair<int, int>> v[50002];
priority_queue< pair< int,int >, vector< pair< int, int >>, greater< pair< int, int >> >q;
int n, m, i, x, y, dp[50002], z, viz[50002], p, le;
void DIJ(){
int nc;
q.push({1,0});
while(q.size() ){
nc = q.top().f;
if (viz[nc] == 0)
{
viz[nc] = 1;
q.pop();
for (auto x : v[nc]) {
if (viz[x.f] == 0) {
if(dp[nc] + x.s < dp[x.f])
dp[x.f] = dp[nc] + x.s;
q.push({x.f,dp[x.f]});
}
}
}
else
q.pop();
}
}
int main()
{
fin>>n>>m;
for(i = 1; i <= m; i++){
fin>>x>>y>>z;
v[x].push_back({y, z});
}
for (i = 2; i <= n; i++)
dp[i] = infi;
DIJ();
for(i = 2; i <= n; i++){
if ( dp[i] == infi )
fout<<0<<' ';
else
fout<<dp[i]<<' ';
}
return 0;
}