Cod sursa(job #3221286)

Utilizator francesca79Feier Francesca francesca79 Data 6 aprilie 2024 15:45:56
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,x,y,z;
vector<pair<int,int>> v[50001];//vector de nod si lugime
int d[50001];//vecotor de directie
int viz[50001];//vector pt. verificare daca a fost "vizitat"
const int inf=1<<30;//constanta pt. initializarea vectorului de distante (2 la puterea 30)

class cmp{
public:
    bool operator () (int x,int y)
    {
        return d[x] > d[y];
    }
}a;

priority_queue<int, vector<int>, cmp> q;

void dijkstra()
{
    for (int i=1;i<=n;i++)
        d[i]=inf;//initializarea
    d[1]=0;
    q.push(1);
    while (!q.empty())
    {
        int x=q.top();
        q.pop();
        for (auto u:v[x])
        {
            if (d[x]+u.second<d[u.first])
                {
                    d[u.first]=d[x]+u.second;
                        if (viz[u.first]==0)
                        {
                            q.push(u.first);
                            viz[u.first]=1;
                        }
                }
        }
    }
}
int main()
{
    fin >> n >> m;
    while (fin >> x >> y >> z)
        v[x].push_back({y,z});
    dijkstra();
    for (int i=2;i<=n;i++)
    {
        if (d[i]==inf)
            fout << 0 << " ";
        else
            fout << d[i] << " ";
    }
    return 0;
}