Pagini recente » Cod sursa (job #865389) | Cod sursa (job #2796921) | Cod sursa (job #1927183) | Cod sursa (job #1962119) | Cod sursa (job #2206405)
#include <fstream>
#include <queue>
#include <vector>
#define INF 200000000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M;
struct Nod
{
vector <int> Ad;
vector <int> Cost;
} G[50002];
int dist[50002];
void Read()
{
fin>>N>>M;
int a,b,d;
for(int i=1; i<=M; ++i)
{
fin>>a>>b>>d;
G[a].Ad.push_back(b);
G[a].Cost.push_back(d);
}
fin.close();
}
struct comp
{
bool operator()(const int &X,const int &Y)
{
return dist[X]>dist[Y];
}
};
void Dijkstra()
{
priority_queue <int,vector<int>,comp> Heap;
dist[1]=0;
for(int i=2; i<=N; ++i)
dist[i]=INF;
for(int i=1; i<=N; ++i)
Heap.push(i);
int curent;
while(!Heap.empty())
{
curent=Heap.top(); Heap.pop();
for(int i=0; i<G[curent].Ad.size(); ++i)
dist[G[curent].Ad[i]]=min(dist[G[curent].Ad[i]],dist[curent]+G[curent].Cost[i]);
}
}
void Print()
{
for(int i=2; i<=N; ++i)
if(dist[i]<INF) fout<<dist[i]<<' ';
else fout<<'0'<<' ';
fout.close();
}
int main()
{
Read();
Dijkstra();
Print();
return 0;
}