Cod sursa(job #1877109)

Utilizator danysilas23Silas Daniel danysilas23 Data 12 februarie 2017 22:32:26
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
using PII = pair<int,int>;
using VI = vector<int>;
const int Inf=0x3f3f3f3f;
int N,M;
vector<vector<PII>> G;
VI d;
void Read();
void Dijkstra(int x, VI& d);
int main(){
    Read();
    Dijkstra(1,d);
    for(int i=2;i<=N;++i)
    if(d[i]!=Inf)
fout<<d[i]<<" ";
else fout<<0<<" ";
fout.close();
}
void Read()
{
fin>>N>>M;
G=vector<vector<PII>>(N+1);
while(M--)
{
int x,y,c;
fin>>x>>y>>c;
G[x].push_back({y,c});
}
fin.close();
}
void Dijkstra(int x, VI& d)
{
priority_queue<PII, vector<PII>, greater<PII>> Q;
d[x]=0;
Q.push({0,x});
while(!Q.empty())
{
int x_nou=Q.top().second, dx=Q.top().first;
Q.pop();
if(d[x_nou]<dx) continue;
for(auto p : G[x_nou])
{
int y=p.first, w=p.second;
if(d[y]>d[x_nou]+w)
d[y]=d[x_nou]+w;
Q.push({d[y],y});
}}}