Pagini recente » Cod sursa (job #3039802) | Cod sursa (job #1407551) | Cod sursa (job #3241676) | Cod sursa (job #2183789) | Cod sursa (job #2405828)
#include<iostream>
#include<fstream>
#include<vector>
#include<set>
#define DN 50050
#define DM 25050
#define INF 1999999999
using namespace std;
fstream fin("dijkstra.in",ios::in), fout("dijkstra.out",ios::out);
multiset<pair<int,int> > heap;
vector<pair<int,int> > lista[DN];
int n,m,d[DN],p[DN];
bool dijkstra()
{
int i,j,u,v,c;
for(i=1;i<=n;i++)
{
d[i]=INF; //infinit
p[i]=-1;
}
d[1]=0;
heap.insert(make_pair(0,1));
while(heap.empty()==0)
{
u = (*heap.begin()).second;
heap.erase(heap.begin());
//if(p[u]!=-1) continue;
for(i=0;i<lista[u].size();i++)
{
v=lista[u][i].first;
c=lista[u][i].second;
if(d[v]>d[u]+c)
{
d[v]=d[u]+c;
p[v]=u;
heap.insert(make_pair(d[v],v));
}
}
}
}
int main()
{
int i,x,y,c;
fin>>n>>m;
for(i = 1; i <= m; i++)
{
fin>>x>>y>>c;
lista[x].push_back(make_pair(y,c));
}
dijkstra();
for(i=2;i<=n;i++)
{
if(d[i]==INF)
d[i]=0;
fout<<d[i]<<" ";
}
fout<<"\n";
return 0;
}