Pagini recente » Cod sursa (job #1690086) | Cod sursa (job #2888825) | Cod sursa (job #1459153) | Cod sursa (job #2401651) | Cod sursa (job #2830571)
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("distante.in");
ofstream gout("distante.out");
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;
vector< int > distante_de_verificat;
vector<int> Dist;
vector<bool> parcurs;
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.push_back(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));
}
parcurs.resize(n+1);
coada.push(make_pair(0,s));
Dist.resize(n+1);
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-1])
ok = 1;
else
ok = 0;
}
if(ok == 1)
gout<<"DA";
else
gout<<"NU";
}
return 0;
}