Cod sursa(job #3337487)

Utilizator todoranstefaniaTodoran Stefania todoranstefania Data 27 ianuarie 2026 23:30:29
Problema Ubuntzei Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <algorithm>
#define inf 1e18
#define pii pair<int, int>
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
priority_queue<pii, vector<pii>, greater<pii>>pq;
vector<pii>g[2005];
int n, m, c[2005], k;
int d[2005];
void dijkstra(int start)
{
    for(int i=1; i<=n; i++)
        d[i]=inf;
    d[start]=0;
    pq.push({0, start});
    while(!pq.empty())
    {
        int nod_curent=pq.top().second;
        int dist=pq.top().first;
        pq.pop();
        if(dist>d[nod_curent])
            continue;
        for(auto x:g[nod_curent])
        {
            if(d[x.second]>d[nod_curent]+x.first)
            {
                d[x.second]=d[nod_curent]+x.first;
                pq.push({d[x.second], x.second});
            }
        }
    }
}
int nod=1, sum=0, mini=10000000, nod_urmator=0;
int main()
{
    fin>>n>>m;
    fin>>k;
    for(int i=1; i<=k; i++)
        fin>>c[i];
    int x, y, z;
    for(int i=1; i<=m; i++)
    {
        fin>>x>>y>>z;
        g[x].push_back({z, y});
        g[y].push_back({z, x});
    }
//   sort(c+1, c+k+1, cmp);
    int ok=1;
    while(nod!=n && ok)
    {

        ok=0;
        int cnt=0;
        for(int i=1; i<=k; i++)
            if(c[i]!=-1)
            {
                ok=1;
            }
            else
            {
                cnt++;
            }
        if(!ok)
        {
            dijkstra(nod);
            sum+=d[n];
            break;
        }
        else
        {
            mini=10000000,
            dijkstra(nod);
            for(int i=1; i<=k; i++)
            {
                if(c[i]!=nod && c[i]!=-1)
                {
                    if(mini>d[c[i]]){
                    mini=min(mini, d[c[i]]);
                    nod_urmator=i;
                    }
                }
            }
            sum+=mini;
            nod=c[nod_urmator];
            c[nod_urmator]=-1;
        }
    }
    fout<<sum;
    return 0;
}