Cod sursa(job #2707379)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 16 februarie 2021 21:05:30
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <tuple>


const int MAXN = 50001;

using namespace std;

typedef pair<int,int> pii;
typedef tuple<int,int,int> tp;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

bool viz[MAXN];
int n,m,dp[MAXN];
vector<pii>graf[MAXN];
priority_queue<tp,vector<tp>,greater<tp>>coada;

void solve(){
    dp[1] = 0;
    coada.push(make_tuple(0,1,1));
    while(coada.size()){
        auto top = coada.top();
        int cost = get<0>(top);
        int nod = get<1>(top);
        int muchie = get<2>(top);

        coada.pop();
        if(viz[nod])
            continue;
//        cout<<"Vizitez "<<nod<<endl;
        viz[nod] = true;
        dp[nod] = cost;
        for(auto muchie : graf[nod]){
            int vecin = muchie.first,cost_muchie = muchie.second;
            if(viz[vecin])
                continue;
//            cout<<"Nodul "<<nod<<" -> "<<vecin<<" c : "<<dp[vecin]<<endl;
            coada.push(make_tuple(cost + cost_muchie,vecin,cost_muchie));
        }
    }
    for(int i = 2; i <= n; i++)
        out<<dp[i]<<" ";
}

int main()
{
    in>>n>>m;
    for(int i = 1; i <= m; i++){
        int x,y,cost;
        in>>x>>y>>cost;
        graf[x].push_back({y,cost});
        graf[y].push_back({x,cost});
//        cout<<x<<" "<<y<<endl;
    }
    solve();
    return 0;
}