Why this code get WA?
Насколько я понял, есть орграф без циклов, при этом если из вершины v1 можно попасть в v2, из v2 в v3, то и из v1 можно попасть в v3 (дуга моделирует победу). Команда v1 лучше v2, если нет u, отличной от v1 и v2/ из u можно попасть в v1 и v2.
Код с WA2:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
const int nmax = 1005;
bool a[nmax][nmax];
int d[nmax], p[nmax]; //d[v]=0,если нет входящих дуг в v, p[v]-вершина u/ v достижима из u и d[v]=0.
bool used[nmax];
char ch;
int n, q, v, u;
void DFS(int v, int par);
void main()
{
scanf("%d\n", &n);
for (int i = 1; i <= n; i++)
{
d[i] = 0;
used[i] = false;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
scanf("%c", &ch);
if (ch == '0') a[i][j] = 0;
else a[i][j] = 1;
d[j]+=a[i][j];
if (j == n) scanf("\n");
}
}
for (int i = 1; i <= n; i++)
{
if (d[i] == 0)
{
p[i] = i;
DFS(i, i);
}
}
scanf("%d\n", &q);
for (int i = 1; i <= q; i++)
{
scanf("%d %d\n", &v, &u);
if ((d[v] > 0) && (d[u] > 0) && (p[v] == p[u])) printf("No\n");
else printf("YES\n");
}
}
void DFS(int v, int par)
{
used[v] = true;
for (int i = 1; i <= n; i++)
{
if ((!used[i]) && (a[v][i] == 1))
{
p[i] = par;
DFS(i, par);
}
}
}
Ошибка была в том, что из несколько вершин, не имеющих входные дуги, можно попасть в некоторую вершину.
Edited by author 03.01.2017 22:31