Pagini recente » Cod sursa (job #573125) | Cod sursa (job #3126391) | Cod sursa (job #2086038) | Cod sursa (job #160283) | Cod sursa (job #2298816)
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int N, M, S;
int dists[50005];
vector < pair<int, int> > g[50005];
bool visited[50005];
void BFS(int startNode)
{
if(dists[startNode] != 0)
{
fout << "NU\n";
return ;
}
memset(visited, 0, sizeof(visited));
queue <int> q;
q.push(startNode);
while(!q.empty())
{
int currentNode = q.front();
q.pop();
for(auto it : g[currentNode])
{
if(visited[it.first] != true)
{
if(dists[currentNode] + it.second < dists[it.first])
{
fout << "NU\n";
return ;
}
visited[it.first] = true;
q.push(it.first);
}
}
}
fout << "DA\n";
}
void Solve()
{
fin >> N >> M >> S;
for(int i = 1; i <= N; i++)
fin >> dists[i];
int x, y, c;
for(int i = 1; i <= M; i++)
{
fin >> x >> y >> c;
g[x].push_back(make_pair(y, c));
}
BFS(S);
}
int main()
{
int T;
fin >> T;
while(T--)
Solve();
return 0;
}