Cod sursa(job #3165412)

Utilizator cristianabalcanuCristiana Balcanu cristianabalcanu Data 6 noiembrie 2023 09:43:26
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>
#define NN 50000
#define INF 1000000005
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");

struct Muchie
{
    int nod, dis;
};

int n, m, a;
Muchie b;
vector <Muchie> v[NN];
int d[NN], pre[NN], vis[NN];

Muchie varfminim()
{
    Muchie x;
    x.dis = INF;
    for(int i = 1 ; i <= n ; i++)
    {
        if(vis[i] == 0 && x.dis > d[i])
        {
            x.dis = d[i];
            x.nod = i;
        }
    }
    return x;
}

int main()
{
    fin >> n >> m;
    for(int i = 1 ; i <= m ; i++)
    {
        fin >> a >> b.nod >> b.dis;
        v[a].push_back(b);
    }
    for(int i = 1 ; i <= n ; i++)
    {
        d[i] = INF;
        pre[i] = 1;
    }
    d[1] = 0;
    pre[1] = 0;
    for(int j = 1 ; j <= n ; j++)
    {
        Muchie mn = varfminim();
        vis[mn.nod] = 1;
        for(int i = 0 ; i < v[mn.nod].size() ; i++)
        {
            b = v[mn.nod][i];
            if(vis[b.nod] == 0 && d[b.nod] > mn.dis + b.dis)
            {
                pre[b.nod] = mn.nod;
                d[b.nod] = mn.dis + b.dis;
            }
        }
    }
    for(int i = 2 ; i <= n ; i++)
    {
        if(d[i] == INF)
            d[i] = 0;
        fout << d[i] << " ";
    }
    return 0;
}