ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1487. Chinese Football

Why this code get WA?
Posted by Felix_Mate 16 Aug 2016 16:21
Насколько я понял, есть орграф без циклов, при этом если из вершины 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