Pagini recente » Cod sursa (job #746900) | Cod sursa (job #2343276) | Cod sursa (job #2142559) | Cod sursa (job #209152) | Cod sursa (job #2423374)
#include<fstream>
#include<vector>
#define NMAX 50005
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int n, m, s, ok, d[NMAX], t;
vector < pair<int,int> > graf[NMAX];
void verifica()
{
for(int i = 1 ; i <= n ; i++){
if (i != s){
int ok = 0;
for(int j = 0 ; j < graf[i].size() ; j++){
if(d[graf[i][j].first] > d[i] + graf[i][j].second){
g<<"NU"<<'\n';
return ;
}
if(d[i] == d[graf[i][j].first] + graf[i][j].second)
ok = 1;
}
if(!ok){
g<<"NU"<<'\n';
return ;
}
}
}
g<<"DA"<<'\n';
return ;
}
void citire()
{
f>>t;
for(int i = 0 ; i < t ; i++){
f>>n>>m>>s;
for(int j = 1 ; j <= n ; j++){
f>>d[j];
}
for(int j = 0 ; j < m ; j++){
int x, y, c;
f>>x>>y>>c;
graf[x].push_back(make_pair(y, c));
graf[y].push_back(make_pair(x, c));
}
if(d[s])
g<<"NU"<<'\n';
else{
verifica();
}
}
}
int main()
{
citire();
return 0;
}