public ArrayList<Edge> getCoveringTree(){
    ArrayList<Location> nodes = this.getAllLocations();
    DisjointSets ds = new DisjointSets(nodes);
    ArrayList<Edge> edges = this.getAllEdges();
    Collections.sort(edges);
    ArrayList<Edge> coveringEdges = new ArrayList<>();
    for (int i = 0; i < edges.size(); i++){
        Edge edge = edges.get(i);
        if (!ds.haveSameParents(edge.getTo(), edge.getFrom())){
            coveringEdges.add(edge);
            ds.union(edge.getTo(), edge.getFrom());
        }
    }
    return coveringEdges;
}