Cod sursa(job #3310232)

Utilizator bagae123Burlacu Andrei bagae123 Data 12 septembrie 2025 10:49:13
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#include<bits/stdc++.h>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int NMAX=50000;

priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
int d[NMAX+5];
vector<pair<int,int>>graph[NMAX+5];
void reset_dijkstra(int n)
{
    for(int i=1;i<=n;i++)
    {
        d[i]=2e9;
    }
}
void dijkstra(int StartNode,int nodes)
{
    reset_dijkstra(nodes);
pq.push({0,StartNode});
d[StartNode]=0;
while(!pq.empty())
{
    auto [dist,CurrNode]=pq.top();
    pq.pop();
    if(dist>d[CurrNode])continue;


    for(auto &[Neighbor,Cost]:graph[CurrNode])
    {
     if(d[Neighbor]>d[CurrNode]+Cost)
     {
         d[Neighbor]=d[CurrNode]+Cost;
         pq.push({d[CurrNode]+Cost,Neighbor});
     }
    }



}
}
void edge(int x,int y,int cost)
{
    graph[x].push_back({y,cost});
    graph[y].push_back({x,cost});
}
void Reset_Graph(int n)
{
    for(int i=1;i<=n;i++)
    graph[i].clear();
}
int main()
{
int t;
fin>>t;
while(t--)
{
    int n,m,StartNode;
    fin>>n>>m>>StartNode;
    int v[n+1];
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    while(m--)
    {int x,y,cost;
        fin>>x>>y>>cost;
        edge(x,y,cost);
    }
    bool ok=0;
    dijkstra(StartNode,n);
    for(int i=1;i<=n;i++)
    {
        if(v[i]!=d[i]){fout<<"NU\n";ok=1;break;}
    }
    if(!ok)fout<<"DA"<<"\n";
    Reset_Graph(n);


}
    return 0;
}