Pagini recente » Monitorul de evaluare | Cod sursa (job #3320652) | Cod sursa (job #1005801) | Cod sursa (job #205359) | Cod sursa (job #3328484)
#include <fstream>
#include <vector>
#include <set>
#define infinit 0x7FFFFFFF
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
set<pair<int,int>> s;
vector <pair<int,int>> lista[50001];
int d[50001],n;
int main()
{
int m,n1,n2,c,u,v,costu,costv,i;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>n1>>n2>>c;
lista[n1].push_back(make_pair(n2,c));
}
for(i=1;i<=n;i++)
d[i]=infinit;
d[1]=0;
s.insert(make_pair(0,1));
while(!s.empty())
{
u=s.begin()->second;
costu=s.begin()->first;
s.erase(s.begin());
for(i=0;i<lista[u].size();i++)
{
v=lista[u][i].first;
costv=lista[u][i].second;
if(d[v]>d[u]+costv)
{
if(d[v]!=infinit)
s.erase(s.find(make_pair(d[v],v)));
d[v]=d[u]+costv;
s.insert(make_pair(d[v],v));
}
}
}
for(i=2;i<=n;i++)
{
if(d[i]==infinit)
cout<<0<<" ";
else
cout<<d[i]<<" ";
}
return 0;
}