Cod sursa(job #2828885)

Utilizator asdfsfafafafafafafafaJarca Andrei asdfsfafafafafafafafa Data 8 ianuarie 2022 05:44:25
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> p;
ifstream fin("distante.in");
ofstream fout("distante.out");
int viz[100001];
vector<pair<int,int>>graf_d[50001];
int distanta_dijkstra[50001];
int distanta_test[50001];
void citire_dijkstra()
{
    int xq;
    fin>>xq;
    while(xq)
    {
        int N,M,S;
        fin>>N>>M>>S;
        for(int i=1;i<=N;i++)
            fin>>distanta_test[i];
        for(int i=0;i<M;i++)
        {
            int x,y,z;
            fin>>x>>y>>z;
            graf_d[x].push_back(make_pair(y,z));
            graf_d[y].push_back(make_pair(x,z));
        }
        for(int i=1;i<=N;i++)
            distanta_dijkstra[i]=INT_MAX;
        
        distanta_dijkstra[S]=0;
        priority_queue<p,vector<p>,greater<p>>heap;
        heap.push(make_pair(0,S));
        
        for(int i=1;i<=N;i++)
            viz[i]=0;
        while(!heap.empty())
        {
            int current=heap.top().second;
            heap.pop();
            if(viz[current]==1)
                continue;
            else
                viz[current]=1;
            for(auto x:graf_d[current])
                if(distanta_dijkstra[current]+x.second < distanta_dijkstra[x.first])
                {
                    distanta_dijkstra[x.first]=distanta_dijkstra[current]+x.second;
                    heap.push(make_pair(distanta_dijkstra[x.first],x.first));
                }
        }
        int fl=0;
        for(int i=1;i<=N;i++)
            if(distanta_dijkstra[i]!=distanta_test[i])
            {
                fl=1;
                break;
            }
        if(fl==1)
            fout<<"NU"<<"\n";
        else
            fout<<"DA"<<"\n";
        xq--;
        for(int i=1;i<=N;i++)
            graf_d[i].clear();
    }
}
int main()
{
   citire_dijkstra();
}