ACM HDOJ 1213 (How Many Tables )

来源:互联网 发布:淘宝特卖在哪里 编辑:程序博客网 时间:2024/05/17 03:04

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1213

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scn = new Scanner(System.in);int casesNumber = Integer.parseInt(scn.next());while (0 <= --casesNumber) {int pointsNumber = Integer.parseInt(scn.next());DisjointSet disjointSet = new DisjointSet(pointsNumber);int relationNumber = Integer.parseInt(scn.next());while (0 <= --relationNumber) {int x = Integer.parseInt(scn.next()) - 1;int y = Integer.parseInt(scn.next()) - 1;disjointSet.union(x, y);}System.out.println(disjointSet.calculateSetNumber());}scn.close();}}class DisjointSet {private int pointsNumber;private int[] flag;private int find(int r) {while (r != flag[r]) {r = flag[r];}return r;}public DisjointSet(int pointsNumber) {this.pointsNumber = pointsNumber;flag = new int[pointsNumber];for (int i = 0; i < pointsNumber; ++i) {flag[i] = i;}}public int calculateSetNumber() {int count = 0;for (int i = 0; i < pointsNumber; ++i) {if (flag[i] == i) {++count;}}return count;}public void union(int x, int y) {int xRoot = find(x);int yRoot = find(y);if (xRoot != yRoot) {flag[yRoot] = xRoot;}}}

 

0 0
原创粉丝点击