Cod sursa(job #3258392)

Utilizator poparobertpoparobert poparobert Data 22 noiembrie 2024 11:40:52
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <string.h>
#include <string>
#include <bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
typedef long long ll;
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define XD return cout<<ans[1],void();
#define DX return cout<<ans[0],void();
#define spit(x) return cout<<x<<'\n',void()
typedef pair<ll,ll> pll;
typedef array<ll,2> ll2;
typedef array<ll,4> ll4;
string ans[]={"NO\n","YES\n"};
void solve(){
    ll n,i,j,k,l,m,a,b,c;
    cin>>n>>m;
    priority_queue<ll2,vector<ll2>,greater<ll2>>pq;
    vector<vector<ll2>>vec(n+1);
    vector<ll>cst(n+1,1e15);
    for(i=1;i<=m;i++){
        cin>>a>>b>>c;
        vec[a].push_back({c,b});
        //vec[b].push_back({c,a});
    }
    pq.push({0,1});
    cst[1]=0;
    while(!pq.empty()){
        auto [dst,nod]=pq.top();
        pq.pop();
        if(cst[nod] != dst)continue;
        for(auto [c,y]:vec[nod]){
            if(cst[y] > dst + c){
                //cout<<nod<<' '<<dst<<' '<<y<<' '<<c<<endl;
                cst[y] = dst + c;
                pq.push({cst[y],y});
            }
        }
    }
    for(i=2;i<=n;i++)cout<<(cst[i] == 1e15 ? 0ll : cst[i])<<' ';
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    //ll t;cin>>t;while(t--)
    solve();
    return 0;
}