разбить дерево на четное количество узлов - PullRequest
0 голосов
/ 14 ноября 2018

Вам дано дерево (простой связный граф без циклов).

Найдите максимальное количество ребер, которые вы можете удалить из дерева, чтобы получить лес, такой, чтобы каждый связанный компонент леса содержалчетное число узлов.

https://www.hackerrank.com/challenges/even-tree/problem

В приведенной выше ссылке приведены контрольные примеры.Для ввода сэмпла 1 я получаю 0 в качестве выхода вместо ожидаемого значения 2.

#include<stdio.h>
#include<stdlib.h>
int ans = 0;
int v, e;
int visited[201];
int gph[201][201];

int dfs(int i) {
    int num_nodes;
    int num_vertex = 0;
    visited[i] = 1;
    for (int j = 1; j <= v; j++) {
        if (visited[i] == 0 && gph[i][j] == 1) {
            num_nodes = dfs(j);
            if (num_nodes % 2 == 0)
                ans++;
            else
                num_vertex += num_nodes;
        }
    }
    return num_vertex + 1;
}

int main() {
    scanf("%d %d", &v, &e); // vertices and edges
    int u, v;
    for (int i = 0; i < e; i++) {
        scanf("%d %d", &u, &v); //edges of undirected graph
        gph[u][v] = 1;
        gph[v][u] = 1;
    }
    dfs(1);
    printf("%d", ans);
}

Контрольный пример:

10 9 2 1 3 1 4 3 5 2 6 17 2 8 6 9 8 10 8

  • Ожидаемый результат: 2

  • Фактический выход: 0

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018
// ans is total number of edges removed and al is adjacency list of the tree.
int dfs(int node) 
{
    visit[node]=true;
    int num_vertex=0;
    for(int i=0;i<al[node].size();i++)
    {
        if(!visit[al[node][i]])
        {
            int num_nodes=dfs(al[node][i]);
            if(num_nodes%2==0)
                ans++;
            else
                num_vertex+=num_nodes;
        }
    }
    return num_vertex+1; 
}   
0 голосов
/ 15 ноября 2018

Есть опечатка. Выражение условия в if предложении

if (visited[i] == 0 && gph[i][j] == 1)

должно быть

if (visited[j] == 0 && gph[i][j] == 1)

Кстати, ограничения в вопросе о хакранках 2 <= n <= 100, поэтому вам определенно не нужен фиксированный массив размером 201.

...