CSES - Suurin joukko

Luvut 1,2,\dots,n ovat aluksi jokainen omassa joukossaan. Tehtäväsi on toteuttaa luokka, jossa voi yhdistää kaksi joukkoa sekä hakea suurimman joukon koon.

Voit olettaa, että n on enintään 10^5 ja luokan metodeita kutsutaan enintään 10^5 kertaa.

Python

Toteuta tiedostoon maxset.py luokka MaxSet, jossa on seuraavat metodit:

  • konstruktori, jolle annetaan lukujen määrä
  • merge yhdistää joukot, joissa on luvut a ja b (jos ne ovat eri joukoissa)
  • get_max ilmoittaa suurimman joukon koon
class MaxSet:
    def __init__(self,n):
        # TODO

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

    def get_max(self):
        # TODO

if __name__ == "__main__":
    m = MaxSet(5)
    print(m.get_max()) # 1
    m.merge(1,2)
    m.merge(3,4)
    m.merge(3,5)
    print(m.get_max()) # 3
    m.merge(1,5)
    print(m.get_max()) # 5

Java

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

  • konstruktori, jolle annetaan lukujen määrä
  • merge yhdistää joukot, joissa on luvut a ja b (jos ne ovat eri joukoissa)
  • getMax ilmoittaa suurimman joukon koon
public class MaxSet {
    public MaxSet(int n) {
        // TODO
    }

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

    public int getMax() {
        // TODO
    }

    public static void main(String[] args) {
        MaxSet m = new MaxSet(5);
        System.out.println(m.getMax()); // 1
        m.merge(1,2);
        m.merge(3,4);
        m.merge(3,5);
        System.out.println(m.getMax()); // 3
        m.merge(1,5);
        System.out.println(m.getMax()); // 5
    }
}