Pagini recente » Cod sursa (job #2510439) | Cod sursa (job #2485045) | Cod sursa (job #174617) | Cod sursa (job #1844952) | Cod sursa (job #850868)
Cod sursa(job #850868)
#include <stdio.h>
#include <vector>
#define NMAX 50500
#define INF (1 << 30)
using namespace std;
int dist[NMAX], correct[NMAX];
vector <pair <int, int> > G[NMAX];
int main()
{
int test, i, x, y, T, N, M, S, cost;
vector <pair <int, int> > :: iterator it;
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
scanf("%d", &T);
for (test = 1; test <= T; test ++)
{
scanf("%d%d%d", &N, &M, &S);
for (i = 1; i <= N; i ++)
{
scanf("%d", &dist[i]);
correct[i] = INF;
G[i].clear();
}
for (i = 1; i <= M; i ++)
{
scanf("%d%d%d", &x, &y, &cost);
G[x].push_back(make_pair(y, cost));
G[y].push_back(make_pair(x, cost));
}
bool isCorrect = true;
if (dist[S])
isCorrect = false;
correct[S] = 0;
if (isCorrect)
for (i = 1; i <= N; i ++)
for (it = G[i].begin(); it != G[i].end(); it ++)
if (dist[i] + it -> second < correct[it -> first])
correct[it -> first] = dist[i] + it -> second;
for (i = 1; i <= N; i ++)
if (correct[i] != dist[i])
isCorrect = false;
if (isCorrect == true)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}