Pagini recente » Cod sursa (job #2834168) | Cod sursa (job #1706070) | Cod sursa (job #2640040) | Cod sursa (job #2002199) | Cod sursa (job #961740)
Cod sursa(job #961740)
#include <fstream>
#include <vector>
#define mp make_pair
#define x first
#define y second
using namespace std;
const char iname[] = "distante.in";
const char oname[] = "distante.out";
ifstream fin(iname);
ofstream fout(oname);
int T, N, M, S, i, j, a, b, c, ok, este;
int d[50001];
vector < pair <int, int> > v[50001];
vector < pair <int, int> > :: iterator it;
int main(){
fin >> T;
while (T--){
fin >> N >> M >> S;
for (i = 1; i <= N; ++i) fin >> d[i];
for (i = 1; i <= M; ++i){
fin >> a >> b >> c;
v[a].push_back(mp(b, c));
v[b].push_back(mp(a, c));
}
ok = 1;
if (d[S] != 0) continue;
for (i = 1; i <= N && ok; ++i){
it = v[i].begin(); este = 0;
for (; it != v[i].end() && ok; ++it){
if (d[i] + it -> second < d[it -> first]){
ok = 0;
}
else
if (d[i] == d[it -> first] + it -> second) este = 1;
}
if (!este && i != S) ok = 0;
}
if (ok) fout << "DA\n";
else
fout << "NU\n";
}
return 0;
}