import java.util.*; import static com.sun.tools.sjavac.Util.union; public class Graph { private List[] nb; private int n; Graph (int n) { this.n=n; nb = new ArrayList[n]; for (int i=0; i(); } void addEdge (int a, int b) { nb[a].add(b); nb[b].add(a); } Set> sets; Set[] ns; Set> complimentComponent () { sets = new HashSet<>(); ns = new HashSet[n]; for (int i=0; i<=n; i++) { Set s = HashSet.Singleton(i); sets.add(s); ns[i]=s; } for (int i=0; i, Integer> c = new HashMap<>(); for (Set s : sets) { c.put(s, 0); } for (int b : nb[a]) { c.put(ns[b], c.get(ns[b])+1); } for (Set s : sets) { if (s != ns[a] && c.get(s) < s.size()) { // porównuje wskażniki union (ns[a], s); } } } void union (Set s, Set t) { if (s.size() < t.size()) { union (t, s); return; } s.addAll(t); for (int a : t) { ns[a] = s; } sets.remove(t); } } public class Main { public static void main (String[] argv) { } }