|
|
back to boardWhy 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 |
|
|