Pagini recente » Cod sursa (job #1417505) | Cod sursa (job #2111155) | Cod sursa (job #891759) | Cod sursa (job #2805796) | Cod sursa (job #1070174)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int MAXN = 50005;
vector<vector<pair<int, int> > > G;
int a, b, c, N, M, S, T;
int best[MAXN];
queue<int> Q;
bool marked[MAXN];
void read() {
int i;
G.clear();
fin >> N >> M >> S;
for (i = 1; i <= N; ++i)
fin >> best[i];
for (i = 0; i < M; ++i) {
fin >> a >> b >> c;
G[a].push_back(make_pair(b, c));
G[b].push_back(make_pair(a, c));
}
}
string go() {
int node, k = 0;//cate distante minime corecte avem; daca k = N atunci raspunsul este DA
Q.push(1);
do {
node = Q.front();
Q.pop();
vector<pair<int, int> >::iterator it;
for (it = G[node].begin(); it != G[node].end(); ++it) {
if (best[node] + it->second == best[it->first]) {
Q.push(it->first);
k++;
}
}
}while(!Q.empty());
if (k == N)
return "DA";
return "NU";
}
int main() {
G.resize(MAXN);//atribuim MAXN noduri si nr variabil de vecini ca sa putem utiliza clear();
fin >> T;
while (T--) {
read();
fout << go() << '\n';
}
fin.close();
fout.close();
return 0;
}