Pagini recente » Istoria paginii monthly-2014/runda-4 | Cod sursa (job #2694768) | Cod sursa (job #3283698) | Cod sursa (job #207592) | Cod sursa (job #1350979)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
using namespace std;
#define Dmax 50000001
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
void dijkstra(vector< vector< pair<int,int> > > v, int x) {
multiset< pair<int,int> > heap;
vector<int> dist(v.size(),Dmax);
for(size_t j=0;j<v[x].size();++j)
heap.insert(v[x][j]);
dist[x] = 0;
while( !heap.empty() ) {
int nod = heap.begin()->second;
int d = heap.begin()->first;
heap.erase(heap.begin());
if( dist[nod] == Dmax ){
dist[nod] = d;
for(size_t j=0;j<v[nod].size();++j)
if( dist[ v[nod][j].second ] == Dmax )
heap.insert( pair<int,int>(v[nod][j].first + d , v[nod][j].second ) );
}
}
for(size_t i=2;i<dist.size();++i)
if( dist[i] == Dmax)
fout << "0 ";
else
fout << dist[i] << ' ';
fout << '\n';
}
int main()
{
int N,M;
vector< vector< pair<int,int> > > v;
fin >> N >> M;
v.resize(N+1);
for(int i=0;i<M;++i) {
int n1,n2,d;
fin >> n1 >> n2 >> d;
v[n1].push_back( pair<int,int>(d,n2) );
}
dijkstra(v,1);
fin.close();
fout.close();
return 0;
}