Pagini recente » Cod sursa (job #2177597) | Cod sursa (job #2538841) | Cod sursa (job #2965280) | Cod sursa (job #1765817) | Cod sursa (job #2519967)
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 50005
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct nod{
int y;
int cost;
};
int t, n, m, s;
int dmindeverif[NMAX], dmin[NMAX];
int viz[NMAX];
vector<nod>graph[NMAX];
queue<int>Q;
void parcurgere(){
Q.push(s);
viz[s]=1;
dmin[s]=0;
while(!Q.empty()){
int x=Q.front();
for(auto &v:graph[x]){
if(dmin[v.y] > dmin[x]+v.cost){
dmin[v.y]=dmin[x]+v.cost;
if(viz[v.y]==0)
Q.push(v.y);
viz[v.y]=1;
}
}
viz[x]=0;
Q.pop();
}
}
void init(){
for(int i=1; i<=n; i++)
{
dmin[i] = 0x3f3f3f3f;
viz[i] = 0;
}
}
void teste(){
f>>n>>m>>s;
init();
for(int i=1; i<=n; i++)
f>>dmindeverif[i];
int x, y, c;
for(int i=1; i<=m; i++){
f>>x>>y>>c;
graph[x].push_back({y, c});
}
parcurgere();
dmin[s] = 0;
int ok=1;
for(int i=1; i<=n && ok==1; i++){
if(dmin[i] != dmindeverif[i])
ok=0;
}
if(ok == 0)
g<<"NU"<<'\n';
else g<<"DA"<<'\n';
}
int main()
{
f>>t;
for(int i=1; i<=t; i++)
teste();
return 0;
}