Cod sursa(job #2377142)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 8 martie 2019 22:19:17
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <bits/stdc++.h>
	
 
	
using namespace std;
	
 
	
ifstream in("dijkstra.in");
	
ofstream out("dijkstra.out");
	
const int nmax=50001;
	
const int oo=(1<<30);
	
int n,m,d[nmax];
	
bitset<nmax>seen;
	
vector< pair<int,int> >v[nmax];
	
struct compara
	
{
	
    bool operator()(int x,int y)
	
    {
	
        return d[x]>d[y];
	
    }
	
 
	
};
	
priority_queue < int , vector< int > , compara > coada;
	
void Dijkstra(int nod)
	
{
	
    for(int i=1;i<=n;i++)
	
        d[i]=oo;
	
    d[nod]=0;
	
    coada.push(nod);
	
    seen[nod]=true;
	
    while(!coada.empty())
	
    {
	
        int newnod=coada.top();
	
        coada.pop();
	
        seen[newnod]=false;
	
 
	
        for(size_t i=0;i<v[newnod].size();i++)
	
        {
	
            int vecin=v[newnod][i].first;
	
            int cost=v[newnod][i].second;
	
            if(d[newnod]+cost<d[vecin])
	
            {
	
                d[vecin]=d[newnod]+cost;
	
                if(seen[vecin]==false)
	
                {
	
                    coada.push(vecin);
	
                    seen[vecin]=true;
	
                }
	
            }
	
        }
	
    }
	
}
	
int main()
	
{
	
    in>>n>>m;
	
    int x,y,cost;
	
    for(int i=1;i<=m;i++)
	
    {
	
        in>>x>>y>>cost;
	
        v[x].push_back({y,cost});
	
    }
	
 
	
    Dijkstra(1);
	
    for(int i=2;i<=n;i++)
	
     {
	
        if(d[i]!=oo)
	
            out<<d[i]<<" ";
	
        else
	
            out<<"0 ";
	
    }
	
    return 0;
	
}