Cod sursa(job #2455166)

Utilizator BeginngerThe Mighty Ginger Beginnger Data 10 septembrie 2019 21:10:02
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb

#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define mod 1000000007

using namespace std;

typedef long long ll;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m, dist[4][50002];
vector<pair<int, int> >v[50002];

set<pair<int, int> >s;
bool was[50002];
void djk(int src, int st)
{
    for(int i = 1; i <= n; ++i)
        dist[src][i] = (1<<30);
    dist[src][st] = 0;
    for(int i = 1; i <= n; ++i)
        s.insert({dist[src][i], i});
    while(!s.empty())
    {
        pair<int, int> nod = *s.begin();
        s.erase(nod);
        for(int i = 0; i < v[nod.second].size(); ++i)
        {
            pair<int, int> vecin = v[nod.second][i];
            if(dist[src][nod.second] + vecin.second < dist[src][vecin.first])
            {
                s.erase({dist[src][vecin.first], vecin.first});
                dist[src][vecin.first] = dist[src][nod.second] + vecin.second;
                s.insert({dist[src][vecin.first], vecin.first});
            }
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    f >> n >> m;
    for(int i = 1; i <= m; ++i)
    {
        int a, b, c;
        f >> a >> b >> c;
        v[a].pb({b, c});
       // v[b].pb({a, c});
    }
    djk(1, 1);
    for(int i = 2; i <= n; ++i)
    {
        if(dist[1][i] == (1<<30))
            dist[1][i] = 0;
       g << dist[1][i] << " ";
    }
    g << '\n';
    return 0;
}