Pagini recente » Cod sursa (job #2909398) | Cod sursa (job #213252) | Cod sursa (job #682528) | Cod sursa (job #665151) | Cod sursa (job #1696728)
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#define SIZE 50005
#define INF 184467440737095516
using namespace std;
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
class Dijkstra
{
long long n;//nr de noduri
long long m;//nr de muchii
long long d[SIZE];//distantele de la nodul star la nodul i+1
int viz[SIZE];
vector<vector< pair<long long,long long> > > A;
public:
Dijkstra();
void citire();
void afisare();
void dijkstra(long long x);
};
Dijkstra::Dijkstra()
{
n=0;
m=0;
}
void Dijkstra::citire()
{
long long x,y,z;
f>>n>>m;
A.resize(n+1);
for(long long i=1;i<=m;i++)
{
f>>x>>y>>z;
A[x].push_back(make_pair(-z,y));
A[y].push_back(make_pair(-z,x));
}
}
void Dijkstra::afisare()
{
for(long long i=2;i<=n;i++)
if(d[i]==INF)
g<<0<<" ";
else
g<<d[i]<<" ";
}
void Dijkstra::dijkstra(long long x)
{
int nr=0;
for(int i=2;i<=n;i++)
d[i]=INF;
d[1]=0;
int k=1;
while(k<n)
{
make_heap(A[k].begin(),A[k].end());
while(A[k].size()!=0)
{
if(d[A[k][0].second] > d[k] - A[k][0].first)
d[A[k][0].second] = d[k] - A[k][0].first;
pop_heap(A[k].begin(),A[k].end());
A[k].pop_back();
}
k++;
}
}
int main()
{
Dijkstra D;
D.citire();
D.dijkstra(1);
D.afisare();
return 0;
}