Pagini recente » Cod sursa (job #2075248) | Cod sursa (job #447169) | Cod sursa (job #3275539) | Cod sursa (job #1097300) | Cod sursa (job #3325129)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <tuple>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,x,y,m,c;
const int INF =9999999;
int main()
{
f>>n>>m;
vector <vector<pair<int,int>>> l(n+1);
vector<int> d(n+1);
for(int i=1;i<=m;++i)
{
f>>x>>y>>c;
l[x].push_back(make_pair(y,c));
}
for(int i=1;i<=n;++i)
{
d[i]=INF;
}
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
d[1]=0;
pq.push({0,1});
while(!pq.empty())
{
int cost =pq.top().first;
int u= pq.top().second;
pq.pop();
if(cost>d[u])
continue;
for(auto vecin: l[u])
{
int cost_vecin=vecin.second;
int vecin_nod = vecin.first;
if(d[vecin_nod]>d[u]+cost_vecin)
{
d[vecin_nod]=d[u]+cost_vecin;
pq.push({d[vecin_nod],vecin_nod});
}
}
}
for(int i=2;i<=n;++i)
if(d[i]==INF)
g<<0<<' ';
else
g<<d[i]<<' ';
return 0;
}