Pagini recente » Cod sursa (job #2604802) | Cod sursa (job #1466650) | Cod sursa (job #80281) | Cod sursa (job #16522) | Cod sursa (job #211188)
Cod sursa(job #211188)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,s;
vector <int> v,a[50005],c[50005];
void citire()
{
int x,y,z;
fin >> n >> m >> s;
for (int i=0; i<n; i++)
{
fin >> z;
v.push_back(z);
}
for (int i=0; i<m; i++)
{
fin >> x >> y >> z;
a[x].push_back(y);
a[y].push_back(x);
c[x].push_back(z);
c[y].push_back(z);
}
}
void rezolvare()
{
if (v[s]!=0)
{
fout << "NU\n";
return;
}
int o;
for (int i=1; i<=n; i++)
{
o=0;
for (unsigned j=0; j<a[i].size(); j++)
{
if (v[i]+c[i][j]<v[a[i][j]])
{
fout << "NU\n";
return;
}
if (v[a[i][j]]+c[i][j]==v[i])
o=1;
}
if (!o && i!=s)
{
fout << "NU\n";
return;
}
}
fout << "DA\n";
}
int main()
{
//cout << "Hello world!" << endl;
int t;
for (fin >> t; t; t--)
{
v.clear();
v.push_back(0);
for (int i=0; i<=50002; i++)
{
a[i].clear();
c[i].clear();
}
citire();
rezolvare();
}
return 0;
}