Pagini recente » Cod sursa (job #3036679) | Cod sursa (job #2688731) | Cod sursa (job #1655902) | Cod sursa (job #376208) | Cod sursa (job #1701207)
#include <fstream>
#include <climits>
#define MAX1 50001
#define MAX2 100001
using namespace std;
unsigned short int T;
unsigned short int N, S;
unsigned int M;
unsigned int D[MAX1];
unsigned int path[MAX2];
unsigned int i, j;
bool okay;
struct muchie
{
int a, b, c;
};
muchie v[MAX2];
int main()
{
ifstream fin ("distante.in");
ofstream fout ("distante.out");
fin >> T;
while (T)
{
fin >> N >> M >> S;
for (i=1; i<=N; i++)
{
fin >> D[i];
path[i] = 0;
}
for (i=1; i<=M; i++)
{
fin >> v[i].a >> v[i].b >> v[i].c;
if (v[i].a == S)
path[v[i].b] = v[i].c;
else if (v[i].b == S)
path[v[i].a] = v[i].c;
}
for (i=1; i<=N; i++)
if (i != S && path[i] == 0)
path[i] = INT_MAX;
okay = 0;
while (okay == 0)
{
okay = 1;
for (i=1; i<=M; i++)
{
if (path[v[i].a] + v[i].c < path[v[i].b])
{
path[v[i].b] = path[v[i].a] + v[i].c;
okay = 0;
}
if (path[v[i].b] + v[i].c < path[v[i].a])
{
path[v[i].a] = path[v[i].b] + v[i].c;
okay = 0;
}
}
}
okay = 1;
for (i=1; i<=N && okay; i++)
if (path[i] != D[i])
okay = 0;
if (okay)
fout << "DA\n";
else
fout << "NU\n";
T--;
}
fin.close();
fout.close();
return 0;
}