Pagini recente » Cod sursa (job #1668991) | Cod sursa (job #2059805) | Cod sursa (job #191578) | Cod sursa (job #1558904) | Cod sursa (job #120244)
Cod sursa(job #120244)
#include <stdio.h>
#include <string.h>
struct adj{unsigned int no; long int x;} nod[50010][100];
unsigned int t, n, m, s, ok;
long int dis[50010];
int main()
{
FILE *f, *g;
int i, x, y, d, j, k;
f = fopen("distante.in", "rt");
g = fopen("distante.out", "wt");
fscanf(f, "%d", &t);
for (k = 1; k <= t; k++)
{
memset(nod, 0, 50010 * 100 * sizeof(adj));
fscanf(f, "%d %d %d\n", &n, &m, &s);
for (i = 1; i <= n; i++)
fscanf(f, "%d", &dis[i]);
for (i = 1; i <= m; i++)
{
fscanf(f, "%d %d %d\n", &x, &y, &d);
nod[x][0].no++;
nod[x][nod[x][0].no].no = y;
nod[x][nod[x][0].no].x = d;
nod[y][0].no++;
nod[y][nod[y][0].no].no = x;
nod[y][nod[y][0].no].x = d;
}
i = 1;
ok = 1;
while (ok && i <= n)
{
if (i != s) ok = 0; else ok = 1;
for (j = 1; j <= nod[i][0].no; j++)
if (i != s)
if (dis[nod[i][j].no] + nod[i][j].x == dis[i]) ok = 1;
for (j = 1; j <= nod[i][0].no; j++)
if (dis[nod[i][j].no] + nod[i][j].x < dis[i]) ok = 0;
i++;
}
if (ok) fprintf(g, "%s\n", "DA");
else fprintf(g, "%s\n", "NU");
}
fclose(f);
fclose(g);
}