CSES - Kaikki puut

Tehtäväsi on toteuttaa luokka, jonka avulla pystyy lisäämään kaaren verkkoon sekä laskemaan, montako erilaista virittävää puuta verkolle voidaan muodostaa.

Voit olettaa, että verkossa on enintään 55 solmua ja siihen lisätään enintään 1010 kaarta. Jokainen kaari on suuntaamaton ja verkossa ei ole kahta samanlaista kaarta.

Python

Toteuta tiedostoon alltrees.py luokka AllTrees, jossa on seuraavat metodit:

  • konstruktori, jolle annetaan solmujen määrä
  • add_edge lisää verkkoon kaaren
  • count ilmoittaa virittävien puiden määrän
class AllTrees:
    def __init__(self,n):
        # TODO

    def add_edge(self,a,b):
        # TODO

    def count(self):
        # TODO

if __name__ == "__main__":
    a = AllTrees(3)
    a.add_edge(1,2)
    print(a.count()) # 0
    a.add_edge(1,3)
    print(a.count()) # 1
    a.add_edge(2,3)
    print(a.count()) # 3

Java

Toteuta tiedostoon AllTrees.java luokka AllTrees, jossa on seuraavat metodit:

  • konstruktori, jolle annetaan solmujen määrä
  • addEdge lisää verkkoon kaaren
  • count ilmoittaa virittävien puiden määrän
public class AllTrees {
    public AllTrees(int n) {
        // TODO
    }

    public void addEdge(int a, int b) {
        // TODO
    }

    public int count() {
        // TODO
    }

    public static void main(String[] args) {
        AllTrees a = new AllTrees(3);
        a.addEdge(1,2);
        System.out.println(a.count()); // 0
        a.addEdge(1,3);
        System.out.println(a.count()); // 1
        a.addEdge(2,3);
        System.out.println(a.count()); // 3
    }
}