Cod sursa(job #2540287)

Utilizator whothefuckareunicu buliga whothefuckareu Data 6 februarie 2020 22:25:37
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define INF 1234567890
#define N 100001

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

vector< pair<int,int> > v[N];
int dist[N];
bool viz[N];
priority_queue < pair<int, int> > q;

int main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(0);
    int n, m, p;
    fin >> n >> m;
    p = 1;
    for(int i = 1; i <= m; ++i)
    {
        int x, y, val;
        fin >> x >> y >> val;
        v[x].push_back({y, val});
        v[y].push_back({x, val});
    }
    for(int i = 1; i <= n; ++i) dist[i] = INF;
    dist[p] = 0;
    q.push({0, p});
    while(!q.empty())
    {
        int x = q.top().second;
        q.pop();
        if(viz[x]) continue;
        viz[x] = 1;
        for(int i = 0; i < v[x].size(); ++i)
        {
            int y = v[x][i].first, val = v[x][i].second;
            if(val + dist[x] < dist[y])
            {
                dist[y] = val + dist[x];
                q.push({-dist[y], y});
            }
        }

    }
    for(int i = 2; i <= n; ++i)
        if(dist[i] == INF) fout << "0 ";else
    fout << dist[i] << " ";
    return 0;
}