Cod sursa(job #2803986)

Utilizator petru.burdusaBurdusa Petru petru.burdusa Data 20 noiembrie 2021 17:58:43
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include<fstream>
#include<iostream>
#include<set>
#include<vector>
using namespace std;
int n,m,i,j,viz[50005],r[50005],q,a,b,minim,contor,x,y,z,w;
set< pair<int,int> > s;
vector <int> v[50005],d[50005];
int main()
{
    ifstream in("dijkstra.in");
    ofstream out("dijkstra.out");
    in>>n>>m;

    for(i=2;i<=n;i++)
    {
        r[i]=1<<30;

    }
    r[1]=0;
    for(i=1;i<=m;i++)
    {
        in>>x>>y>>z;
        v[x].push_back(y);
        d[x].push_back(z);
    }
    s.insert(make_pair(0,1));
    contor++;
    while(contor>0)
    {
        w=s.begin()->first;
        q=s.begin()->second;
        if(viz[q]==1)
        {
            s.erase(s.begin());
            contor--;
        }
        else
        {
            viz[q]=1;
            minim=1<<30;
            for(i=0;i<v[q].size();i++)
            {
                if(r[v[q][i]]>r[q]+d[q][i])
                {

                    r[v[q][i]]=r[q]+d[q][i];
                    s.insert(make_pair(r[v[q][i]],v[q][i]));
                    contor++;

                }

            }
        }

    }
    for(i=2;i<=n;i++)
    {
        if(r[i]==1<<30)
            out<<"0 ";
        else
            out<<r[i]<<' ';
    }

}