Pagini recente » Cod sursa (job #1543390) | Cod sursa (job #1937666) | Cod sursa (job #2042989) | Cod sursa (job #2982785) | Cod sursa (job #2828589)
#include <bits/stdc++.h>
#define nr 50002
using namespace std;
int main()
{
ifstream fin("distante.in");
ofstream fout("distante.out");
int nr_grafuri,n,m,sursa,rasp[nr],a,b,c,costuri[nr];
vector<pair<int,int>> muchii[nr];
queue<int> coada;
fin>>nr_grafuri;
for (int k=0;k<nr_grafuri;k++)
{
fin>>n>>m>>sursa;
for (int i=1;i<=n;i++)
{
fin>>rasp[i];
costuri[i] = 1001;
coada.push(i);
}
for (auto& nod : muchii)
{
nod.clear();
}
for (int i=0;i<m;i++)
{
fin>>a>>b>>c;
muchii[a].push_back(make_pair(b,c));
muchii[b].push_back(make_pair(a,c));
}
costuri[sursa] = 0;
while (!coada.empty())
{
int i = coada.front();
int i_size = muchii[i].size();
for (int j=0;j<i_size;j++)
{
int vecin = muchii[i][j].first;
int cost = muchii[i][j].second;
if (costuri[vecin] > costuri[i] + cost)
{
coada.push(vecin);
costuri[vecin] = costuri[i]+cost;
}
}
coada.pop();
}
int ok = 1;
for (int i=1;i<=n;i++)
{
if (costuri[i] != rasp[i])
{
fout<<"NU\n";
ok = 0;
break;
}
}
if (ok == 1)
{
fout<<"DA\n";
}
}
fin.close();
fout.close();
return 0;
}