Pagini recente » Cod sursa (job #1699215) | Cod sursa (job #2947624) | Cod sursa (job #203306) | Cod sursa (job #1758111) | Cod sursa (job #2830584)
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("distante.in");
ofstream gout("distante.out");
int distante_de_verificat[50001];
int Dist[50001];
bool parcurs[50001];
int main()
{
int t,n,m,s,x,a,b,c;
fin>>t;
for(int i = 1; i <= t; i ++)
{
vector< vector<pair<int, int> > > lista_ad;
priority_queue <pair<int, int>, vector <pair<int,int> >, greater <pair<int,int> > > coada;
int ok = 1;
fin>>n>>m>>s;
lista_ad.resize(n+1);
for(int j = 1; j<= n; j++)
{
fin>>x;
distante_de_verificat[j] = x;
}
for ( int i = 0; i < m; i++ )
{
fin >> a >> b >>c;
lista_ad[a].push_back(make_pair(b,c));
lista_ad[b].push_back(make_pair(a,c));
}
coada.push(make_pair(0,s));
for(int i = 1; i<= n;i++)
{
Dist[i] = 10000000;
parcurs[i] = 0;
}
Dist[s] = 0;
while (!coada.empty())
{
int curr = coada.top().second;
if(parcurs[curr] == 1)
continue;
parcurs[curr] = 1;
coada.pop();
for(int i = 0; i < lista_ad[curr].size();i++)
{
if(Dist[curr] + lista_ad[curr][i].second < Dist[lista_ad[curr][i].first])
{
Dist[lista_ad[curr][i].first]=Dist[curr]+lista_ad[curr][i].second;
coada.push(make_pair(Dist[lista_ad[curr][i].first], lista_ad[curr][i].first));
}
}
}
for(int i = 1; i <= n; i++)
{
if (Dist[i] == 10000000)
Dist[i] = 0;
if(Dist[i] == distante_de_verificat[i])
ok = 1;
else
ok = 0;
}
if(ok == 1)
gout<<"DA"<<'\n';
else
gout<<"NU"<<'\n';
}
return 0;
}