Pagini recente » Cod sursa (job #1326227) | Cod sursa (job #1385509) | Cod sursa (job #2314254) | Cod sursa (job #773857) | Cod sursa (job #2345232)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
typedef pair < int, int > pii;
const int INF = 2000000000;
const int Nmax = 50001;
int N,M,V;
bool viz[Nmax];
vector <pii> Ad[Nmax];
priority_queue <pii, vector <pii>, greater<pii> > C;
void Read()
{
V=1;
int x,y,d;
fin>>N>>M;
for(int i=1;i<=M;++i)
{
fin>>x>>y>>d;
Ad[x].push_back(make_pair(y,d));
}
}
void Dijkstra(int x)
{
int nod,v,d;
vector <int> dist(N+1,INF);
dist[x]=0;
C.push(make_pair(0,x));
while(!C.empty())
{
nod=C.top().second;
C.pop();
if(viz[nod]==1)continue;
else viz[nod]=1;
for(int i=0;i<Ad[nod].size();++i)
{
v=Ad[nod][i].first;
d=Ad[nod][i].second;
if(dist[v] > dist[nod] + d)
{
dist[v]=d + dist[nod];
C.push(make_pair(dist[v],v));
}
}
}
for(int i=2;i<=N;++i)
if(dist[i]!=INF)fout<<dist[i]<<" ";
else fout<<0<<" ";
}
int main()
{
Read();
Dijkstra(V);
return 0;
}