Cod sursa(job #3336059)

Utilizator DinVinEmanuel DinVin Data 24 ianuarie 2026 05:53:22
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
// #include <bits/stdc++.h>
// using namespace std;
// ifstream fin ("date.in");
// #define rep(a,b) for(int i=a;i<=a;i++)
// int n,m,k,s;
// struct muchie{int a,b,cost;};
// vector<muchie> M;
// vector<int>control;
// int main() {
//     fin>>n>>m;
//     rep(1,m) {
//         int x,y,z;
//         fin>>x>>y>>z;
//         M.push_back({x,y,z});
//         M.push_back({y,x,z});
//     }
//     fin>>k;
//     rep(1,k) {
//         int x;
//         fin>>x;
//         control.push_back(x);
//     }
//     fin>>s;
//
//
//
//     return 0;
// }

#include <bits/stdc++.h>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
#define rep(a,b) for(int i=a;i<=b;i++)
typedef long long ll;
const int INF = 1e9;
vector<vector<pair<int,ll>>> M;
vector<int> tata;
vector<ll> d;
int n,m;
void dijkstra (int s) {
    priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> Q;
    d[s] = 0;
    Q.push({d[s], s});
    while (!Q.empty()) {
        auto [dist_u, u] = Q.top();
        Q.pop();
        if (dist_u > d[u]) continue;
        for (auto [v,cost] : M[u])
            if (d[v] > cost + d[u]) {
                d[v] = cost + d[u];
                tata[v] = u;
                Q.push({d[v],v});
            }
    }

}
int main() {
    fin>>n>>m;
    M.resize(m+1);
    tata.assign(n+1,0);
    d.assign(n+1,INF);
    rep(1,m) {
        int x,y;
        ll z;
        fin>>x>>y>>z;
        M[x].push_back({y,z});
    }
    dijkstra(1);
    rep(1,n)if (i!=1)fout<<d[i]<<' ';
    return 0;
}