Mai intai trebuie sa te autentifici.
Cod sursa(job #2298846)
Utilizator | Data | 8 decembrie 2018 16:06:19 | |
---|---|---|---|
Problema | Distante | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.15 kb |
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int N, M, S, dists[50005];
vector < pair<int, int> > g[50005];
bool vis[50005], isOk;
void DFS(int Node)
{
vis[Node] = true;
for(auto it : g[Node])
{
int nextNode = it.first;
int cost = it.second;
if(dists[Node] + cost < dists[nextNode] || dists[nextNode] + cost < dists[Node])
isOk = false;
if(!vis[nextNode])
DFS(nextNode);
}
}
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));
}
if(dists[S] != 0)
{
fout << "NU\n";
return ;
}
else
{
memset(vis, false, sizeof(vis));
isOk = true;
DFS(S);
fout << ((isOk == true) ? "DA\n" : "NU\n");
}
}
int main()
{
int T;
fin >> T;
while(T--)
Solve();
return 0;
}