Pagini recente » Cod sursa (job #1767381) | Cod sursa (job #1312204) | Cod sursa (job #1807798) | Cod sursa (job #1561897) | Cod sursa (job #2990696)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX=200005;
vector < pair < int,int > > G[NMAX];
int N,M,viz[NMAX],cost_total;
void citire()
{
fin>>N>>M;
for(int i=0;i<M;i++)
{
int x,y,c;
fin>>x>>y>>c;
G[x].push_back({y,c});
}
}
priority_queue <pair <int,int>> q;
int sol[NMAX];
void prim()
{
for(int i=1;i<=N;i++)
{
sol[i]=NMAX;
}
q.push({0,1});
while(!q.empty())
{
auto cap = q.top();
int nodc = cap.second;
int cost = -cap.first;
q.pop();
if(viz[nodc])
continue;
viz[nodc]=1;
for(auto el: G[nodc])
{
if(!viz[el.first])
{
if(cost+el.second<sol[el.first])
{
sol[el.first]=cost+el.second;
q.push({-(cost+el.second),el.first});
}
}
}
}
for(int i=2;i<=N;i++)
{
if(sol[i]==NMAX)
cout<<0;
else
cout<< sol[i]<<" ";
}
}
int main()
{
citire();
prim();
return 0;
}