Pagini recente » Cod sursa (job #1465897) | Statistici Alex Neagu (sasha05) | Cod sursa (job #1580131) | Monitorul de evaluare | Cod sursa (job #1699746)
#include <fstream>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int mare = 500000000;
long long t, n, m, s, i, j, fin[50015];
long long drm[50015];
bool ok;
struct muchie
{
int x, y, c;
};
muchie v[100015];
int main()
{
f >> t;
while (t)
{
f >> n >> m >> s;
for (i = 1; i <= n; i++)
f >> fin[i], drm[i] = 0;
for (i = 1; i <= m; i++)
{
f >> v[i].x >> v[i].y >> v[i].c;
if (v[i].x == s)
drm[v[i].y] = v[i].c;
}
for (i = 1; i <= m; i++)
if (i != s && drm[i] == 0)
drm[i] = mare;
ok = 0;
while (ok == 0)
{
ok = 1;
for (i = 1; i <= m; i++)
{
if (drm[v[i].x] + v[i].c < drm[v[i].y])
drm[v[i].y] = drm[v[i].x] + v[i].c, ok = 0;
if (drm[v[i].y] + v[i].c < drm[v[i].x])
drm[v[i].x] = drm[v[i].y] + v[i].c, ok = 0;
}
}
ok = 1;
for (i = 1; i <= n && ok; i++)
if (drm[i] != fin[i])
ok = 0;
if (ok)
g << "DA\n";
else
g << "NU\n";
t--;
}
return 0;
}