Cod sursa(job #2455168)

Utilizator BeginngerThe Mighty Ginger Beginnger Data 10 septembrie 2019 21:12:32
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 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];

struct cmp
{
    bool operator()(pair<int, int> a, pair<int, int> b)
    {
        return b.first > a.first;
    }
};
priority_queue<pair<int, int>, vector<pair<int, int> >, cmp>q;
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;
    q.push({0, st});
    while(!q.empty())
    {
        pair<int, int> nod = q.top();
        q.pop();
        if(was[nod.second])
            continue;
        was[nod.second] = 1;
        for(int i = 0; i < v[nod.second].size(); ++i)
        {
            pair<int, int> vecin = v[nod.second][i];
            if(nod.first + vecin.second < dist[src][vecin.first])
            {
                dist[src][vecin.first] = nod.first + vecin.second;
                q.push({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;
}