Узлы в поддереве - PullRequest
0 голосов
/ 19 июня 2019

Даны два узла U, X.Мы должны найти число вхождений X в поддерево U.

Формат ввода

первая строка: два целых числа через пробел N (количество узлов), Q (количество запросов)) соответственно.вторая строка: n, разделенных пробелом int, где ith int обозначает значение, хранящееся в i-м узле.Следующая строка N-1: до int U, V обозначает ребро между узлами U и V. Следующие Q строк: два целых числа U и X.

Контрольный пример: 4 2 1 2 3 2 1 2 1 3 24 1 1 2 2

Вывод: 1 2

import java.util. *;

public class NodesInATree {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("no. of nodes");
    int n = sc.nextInt();
    ArrayList<Integer> arr = new ArrayList<Integer>(n+1);
    HashMap<Integer, ArrayList<Integer>> edges = new HashMap<Integer, ArrayList<Integer>>();
    arr.add(0, -1);
    System.out.println("values of nodes");

    for (int i = 1; i <= n; i++) {
        arr.add(i, sc.nextInt());
        edges.put(i, new ArrayList<Integer>());
    }

    System.out.println("connect edges");
    System.out.println("Total no. of edges");
    int totalEdge = sc.nextInt();

    for (int i = 0; i < totalEdge; i++) {
        int u = sc.nextInt();
        int v = sc.nextInt();

        ArrayList<Integer> temp = edges.get(u);
        temp.add(v);
        edges.put(u, temp);

    }

    System.out.println("Enter number of Queries");
    int q = sc.nextInt();

    while (q > 0) {
        System.out.println("Enter value of two edges");
        int x = sc.nextInt();
        int y = sc.nextInt();

        System.out.println("array");
        for (int i = 0; i < arr.size(); i++) {
            System.out.print(arr.get(i) + " ");
        }

        System.out.println();

        System.out.println("map");
        System.out.println(edges.toString());
        System.out.println(count(edges, arr, x, y));
        q--;
    }

}

private static int count(HashMap<Integer, ArrayList<Integer>> edges, ArrayList<Integer> arr, int x, int y) {
    int count = 1;


    if (arr.get(x-1) == y) {
        count++;
    }
    ArrayList<Integer> child = edges.get(x);

    for (int c : child) {
        count += count(edges, arr, c, y);
    }

    return count;
}

}

Я перепробовал много тестовых примеров, которые все они проходят, но при отправкепроходит только один тестовый пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...