@startuml

DisjointSet <.right. Graph

class Graph {
    -unsigned int numberOfNodes;
    -double **adjMatrix;
    +Graph();
    +Graph(unsigned int numberOfNodes);
    +~Graph();
    +void init();
    +void insertEdge(unsigned int v1, unsigned int v2, double weight);
    +bool rmEdge(unsigned int v1, unsigned int v2);
    +unsigned int getEdgeCount() const;
    +unsigned int getDegreeOf(unsigned int vertex) const;
    +bool tryGetMSTWeight(double &weight) const;
    +unsigned int getSize() const;
}

class DisjointSet {
    +DisjointSet();
    +DisjointSet(unsigned int n);
    +~DisjointSet();
    +void merge(unsigned int i1, unsigned int i2);
    +unsigned int find(unsigned int x);
    -unsigned int n;
    -unsigned int *nodes;
}

class InvalidArgument {}


@enduml