Cod sursa(job #2864429)

Utilizator kontexVeres Norbert kontex Data 7 martie 2022 21:11:44
Problema Ubuntzei Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;

ifstream be("ubuntzei.in");
ofstream ki("ubuntzei.out");

int const dMax=50005;
int d[dMax],varosok[dMax];
int n,m,k;
int vegtelen (1<<30);
int s = 0;

struct comp
{
    bool operator()(int x,int y)
    {
        return d[x] > d[y];
    }
};
vector<pair<int,int> > graf[dMax];
priority_queue<int,vector<int>,comp> sor;
bool jart[dMax];
bool kjart[dMax] = {0};

void dijkstra(int csucs)
{
    for(int i=1;i<=n;i++)
        d[i]=vegtelen;

    d[csucs]=0;
    sor.push(csucs);
    jart[csucs]=1;

    while(!sor.empty())
    {
        int aktualiscsucs = sor.top();
        sor.pop();
        jart[aktualiscsucs]=0;
        for(size_t i=0;i<graf[aktualiscsucs].size();i++)
        {
            int szomszedcsucs = graf[aktualiscsucs][i].first;
            int suly = graf[aktualiscsucs][i].second;

            if(d[aktualiscsucs]+suly<d[szomszedcsucs])
            {
                d[szomszedcsucs]=d[aktualiscsucs]+suly;
                if(jart[szomszedcsucs]==0)
                {
                    jart[szomszedcsucs]=1;
                    sor.push(szomszedcsucs);
                }
            }
        }
    }
}
void dkiir()
{
    for(int i=1;i<=n;i++)
        cout<<d[i]<<' ';
    cout<<endl;
}
int kovetkezo()
{
    int mini = vegtelen;
    int miniIndex;
    for(int i=1;i<=k;i++)
    {
        if(kjart[varosok[i]]==0 && d[varosok[i]]<mini)
        {
            mini = d[varosok[i]];
            miniIndex = i;
        }
    }
    s = s + mini;
    kjart[varosok[miniIndex]] = 1;
    return varosok[miniIndex];
}
int main()
{
    be>>n>>m;
    be>>k;
    for(int i=1;i<=k;i++)
    {
        be>>varosok[i];
    }
    int a,b,c;
    for(int i=0;i<m;i++)
    {
        be>>a>>b>>c;
        graf[a].push_back(make_pair(b,c));
        graf[b].push_back(make_pair(a,c));
    }
    kjart[1] = 1;
    dijkstra(1);
    s+=d[1];
    for(int i=1;i<=k;i++)
    {
        dijkstra(kovetkezo());
        //dkiir();
    }
    s+=d[n];
    cout<<s<<endl;
    ki<<s<<endl;
}