Cod sursa(job #3033272)

Utilizator matwudemagogul matwu Data 23 martie 2023 17:42:59
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 1;
ifstream fin("distante.in");
ofstream fout("distante.out");
void solve() {
	int n, m, s;
	fin >> n >> m >> s;
	vector<vector<pair<int, int>>> liste(n + 1);
	vector<int> v(n + 1);
	for (int i = 1; i <= n; i++) {
		fin >> v[i];
	}
	for (int i = 1; i <= m; i++) {
		int u, v, c;
		fin >> u >> v >> c;
		liste[u].push_back({ v, c });
		liste[v].push_back({ u, c });
	}
	vector<int> viz(n + 1, 1e9 + 1);
	viz[s] = 1;
	queue<int> q;
	q.push(s);
	while (!q.empty()) {
		int nod = q.front();
		q.pop();
		for (auto i : liste[nod]) {
			if (viz[i.first] > viz[nod] + i.second) {
				viz[i.first] = viz[nod] + i.second;
				q.push(i.first);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		if (viz[i] - 1 != v[i]) {
			fout << "NU" << '\n';
			return;
		}
	}
	fout << "DA" << '\n';
}
int main() {
	fin.tie(0)->sync_with_stdio(0);
	int t;
	fin >> t;
	while (t--) {
		solve();
	}

}