Pagini recente » Cod sursa (job #173195) | Cod sursa (job #393034) | Cod sursa (job #1478648) | Cod sursa (job #2721360) | Cod sursa (job #2716009)
#include <fstream>
#include <vector>
#include <set>
#define INF 1<<30
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int distmin[50001];
struct snowboard{int nod, cost;};
vector <snowboard> v[50001];
snowboard aux;
int main()
{
int n,m,nod1,nod2,pret,i,nod,costmin;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>nod1>>nod2>>pret;
aux.nod=nod2;
aux.cost=pret;
v[nod1].push_back(aux);
}
for(i=1;i<=n;i++)
{
distmin[i]=INF;
}
distmin[1]=0;
set < pair<int,int> > multime;
pair<int,int> auxiliar;
auxiliar=make_pair(0,1);
multime.insert(auxiliar);
while(!multime.empty())
{
nod=multime.begin()->second;
costmin=multime.begin()->first;
multime.erase(multime.begin());
for(i=0;i<v[nod].size();i++)
{
if(distmin[v[nod][i].nod]>costmin+v[nod][i].cost)
{
if(distmin[v[nod][i].nod]!=INF)
{
multime.erase(multime.find(make_pair(distmin[v[nod][i].nod],v[nod][i].nod)));
}
multime.insert(make_pair(costmin+v[nod][i].cost,v[nod][i].nod));
distmin[v[nod][i].nod]=costmin+v[nod][i].cost;
}
}
}
for(i=2;i<=n;i++)
{
if(distmin[i]==INF)
{
cout<<0<<" ";
}
else
{
cout<<distmin[i]<<" ";
}
}
return 0;
}