Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class Kunnostus {
- int n;
- int[] vanhempi;
- int[] koko;
- PriorityQueue<Kaari> kaaret;
- ArrayList<Kaari> lyhin;
- public Kunnostus(int n) {
- this.n = n;
- this.vanhempi = new int[n + 1];
- this.koko = new int[n + 1];
- this.kaaret = new PriorityQueue();
- this.lyhin = new ArrayList();
- for (int i = 1; i <= n; i++) {
- vanhempi[i] = i;
- koko[i] = 1;
- }
- }
- public void lisaaTie(int a, int b, int x) {
- kaaret.add(new Kaari(a, b, x));
- }
- public void yhdista(int a, int b) {
- a = etsiHuippu(a);
- b = etsiHuippu(b);
- if (a == b) {
- return;
- }
- if (koko[a] > koko[b]) {
- vanhempi[b] = a;
- koko[a] += koko[b];
- } else {
- vanhempi[a] = b;
- koko[b] += koko[a];
- }
- }
- public int laske() {
- for(Kaari x : kaaret) {
- if(etsiHuippu(x.alku) != etsiHuippu(x.loppu)) {
- yhdista(x.alku, x.loppu);
- lyhin.add(x);
- }
- }
- int ulos = 0;
- for(Kaari y : lyhin) {
- ulos += y.paino;
- }
- return ulos;
- }
- public int etsiHuippu(int x) {
- while (vanhempi[x] != x) {
- x = vanhempi[x];
- }
- return x;
- }
- class Kaari implements Comparable<Kaari> {
- int alku;
- int loppu;
- int paino;
- public Kaari(int a, int l, int p) {
- this.alku = a;
- this.loppu = l;
- this.paino = p;
- }
- public int compareTo(Kaari k) {
- return this.paino - k.paino;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement