Cod sursa(job #2345991)

Utilizator greelioGreenio Greely greelio Data 16 februarie 2019 22:25:54
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
#define N 3010
using namespace std;

const int inf=1e9;
int d[N];
vector<pii>V[N];
int n,m,t,s;
priority_queue<pii,vector<pii>,greater<pii>>Q;

int main() {
    ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
    t=1;
    while (t--) {
        cin>>n>>m;
        for (int i=1; i<=m; ++i) {
            int x,y,c; cin>>x>>y>>c;
            V[x].push_back({y,c});
            V[y].push_back({x,c});
        }s=1;


        for (int i=1; i<=n; ++i) d[i]=inf;
        d[s]=0;
        for (auto it:V[s]) {
            Q.push({it.se, it.fi});
            d[it.fi]=it.se;
        }
        while (Q.size()) {
            int s=Q.top().fi;
            int x=Q.top().se; Q.pop();

            for (auto it: V[x]) {
                int c=it.se;
                int y=it.fi;
                if (s+c<d[y]) {
                    d[y]=s+c;
                    Q.push({s+c,y});
                }
            }
        }
        for (int i=1; i<=n; ++i) {
            if (i==s) continue;
            if (d[i]==inf) cout<<"-1 ";
            else cout<<d[i]<<" ";
        } cout<<"\n";

        for (int i=1; i<=n; ++i) {
            V[i].clear();
        }
    }


    return 0;
}