Cod sursa(job #2556069)

Utilizator Moldovan_Andrei112002Moldovan Andrei Moldovan_Andrei112002 Data 24 februarie 2020 17:42:24
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.76 kb
#include <bits/stdc++.h>
using namespace std;
#define inf 1000000007
ifstream fin("dijkstra.in");ofstream fout("dijkstra.out");
int viz[100005],t[100005],n,start,x,y,co,d[100005],m;
vector<pair<int,int> >a[250005];
vector<pair<int,int> >::iterator it;
pair<int,int>var;
pair<int,int>minn;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
void citire()
{
    start=1;
    fin>>n>>m;
    while(fin>>x>>y>>co)
    {
        var.first=y;var.second=co;
        a[x].push_back(var);
    }
    for(int i=1;i<=n;i++)
    {
        d[i]=inf;
    }
    d[start]=0;
}
int main()
{
    citire();
    for(it=a[start].begin();it<a[start].end();it++)
    {
        d[it->first]=it->second;
        var.first=d[it->second];
        var.second=it->first;
        q.push(var);
    }
    viz[start]=1;
    while(!q.empty())
    {
        minn=q.top();
        q.pop();
        if(t[minn.second]==0)
            t[minn.second]=start;
        if(viz[minn.second]==0)
        {
            viz[minn.second]=1;
            for(it=a[minn.second].begin(); it<a[minn.second].end(); it++)
            {
                if(viz[it->first]==0)
                {
                    if(d[it->first]>d[minn.second]+it->second)
                    {
                        d[it->first]=d[minn.second]+it->second;
                        t[it->first]=minn.second;
                        var.first=d[it->first];
                        var.second=it->first;
                        q.push(var);
                    }
                }
            }
        }
    }
    for(int i=2;i<=n;i++)
    {
        if(d[i]==inf)
            fout<<"0"<<" ";
        else
            fout<<d[i]<<" ";
    }
    fin.close();fout.close();return 0;
}