Pagini recente » Cod sursa (job #775504) | Cod sursa (job #2320659) | Cod sursa (job #885687) | Cod sursa (job #1438665) | Cod sursa (job #3237127)
#include <fstream>
#include <set>
#include <queue>
#include <vector>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
set<pair<int,int>> q;
//valoarea, nodul , nodul din care pleaca cu valoarea respectiva
vector<vector< pair<int,int> >> graf;
vector<pair<int,int>> linie;
vector<int> cost_min;
int main()
{
ios_base::sync_with_stdio(false);
int n,m,i,j,k,x,cost,nod;
auto it = q.end();
pair<int,int> p;
fin>>n>>m;
for(i=0;i<=n;i++)
{
graf.push_back(linie);
cost_min.push_back(2000000000);
}
cost_min[1]=0;
for(i=0;i<m;i++)
{
fin>>j>>k>>x;
graf[j].push_back({x,k});
}
q.insert({0,1});
while(q.begin()!=q.end())
{
it=q.begin();
p=*it;
cost=p.first;
nod=p.second;
q.erase(it);
if(cost_min[nod]>=cost)
for(i=0;i<graf[nod].size();i++)
{
if(cost+graf[nod][i].first<cost_min[graf[nod][i].second])
{
cost_min[graf[nod][i].second]=cost+graf[nod][i].first;
q.insert({ cost_min[graf[nod][i].second] , graf[nod][i].second });
}
}
}
for(i=2;i<=n;i++)
if(cost_min[i]==2000000000)
fout<<"0 ";
else
fout<<cost_min[i]<<' ';
fout<<'\n';
return 0;
}