CSES - Yhtenäisyys

Suuntaamattomassa verkossa on nn solmua. Tehtäväsi on toteuttaa luokka, jonka avulla pystyy lisäämään kaaren verkkoon sekä laskemaan, mikä on pienin määrä kaaria, jotka tulisi lisätä, jotta verkko on yhtenäinen.

Voit olettaa, että nn on enintään 5050 ja luokan metodeita kutsutaan enintään 100100 kertaa.

Python

Toteuta tiedostoon connectivity.py luokka Connectivity, jossa on seuraavat metodit:

  • konstruktori, jolle annetaan solmujen määrä
  • add_edge lisää kaaren kahden solmun välille
  • count ilmoittaa pienimmän määrän lisättäviä kaaria
class Connectivity:
    def __init__(self,n):
        # TODO

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

    def count(self):
        # TODO

if __name__ == "__main__":
    c = Connectivity(5)
    print(c.count()) # 4
    c.add_edge(2,4)
    c.add_edge(3,5)
    print(c.count()) # 2
    c.add_edge(2,3)
    c.add_edge(3,4)
    print(c.count()) # 1
    c.add_edge(1,2)
    print(c.count()) # 0

Java

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

  • konstruktori, jolle annetaan solmujen määrä
  • addLink lisää kaaren kahden solmun välille
  • count ilmoittaa pienimmän määrän lisättäviä kaaria
public class Connectivity {
    public Connectivity(int n) {
        // TODO
    }

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

    public int count() {
        // TODO
    }

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