package com.liang.poj;
import java.util.Scanner;
public class Main {
static int n = 0;
static int m = 0;
static int[] node = null;
static int[] childNum = null;
static int count = 0;
static int sum = 0;
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
n = scan.nextInt();
m = scan.nextInt();
if(n == 0 || m == 0) {
break;
}
node = new int[n + 1];
childNum = new int[n + 1];
makeSet();
for (int i = 1; i <= m; i++) {
int a = scan.nextInt();
int b = scan.nextInt();
merge(a, b);
}
for (int i = 1; i <= n; i++) {
if (node[i] == i) {
sum++;
}
}
System.out.println("Case "+ ++count + ": " + sum);
}
}
public static void makeSet() {
sum = 0;
for (int i = 1; i <= n; i++) {
node[i] = i;
childNum[i] = 0;
}
}
public static int findFather(int x) {
if (x != node[x]) {
x = findFather(node[x]);
}
return x;
}
public static void merge(int a, int b) {
int fa = findFather(a);
int fb = findFather(b);
if (fa != fb) {
if (childNum[fa] >= childNum[fb]) {
node[fb] = fa;
childNum[fa]++;
} else {
node[fa] = fb;
childNum[fb]++;
}
}
}
}
poj 2524(并查集)
最新推荐文章于 2016-07-25 17:30:37 发布