您的位置:首页 > 其它

hihocoder1066-并查集

2017-08-02 16:40 323 查看
package com.snnu;

import java.util.HashMap;
import java.util.Scanner;

public class union_find {
static int maxn = 100000;
static int[] disjointSet = new int[maxn];
static int len;
static int initVal = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
HashMap<String, Integer> map = new HashMap<>();
len = N;
initData();
for (int i = 0; i < N; i++) {
int op = in.nextInt();
String name1 = in.next();
String name2 = in.next();
int fatherx, fathery;
if(op == 0) {
if (!map.containsKey(name1)) {
map.put(name1, initVal++);
}
if (!map.containsKey(name2)) {
map.put(name2, initVal++);
}
fatherx = find(map.get(name1));
fathery = find(map.get(name2));
if( fatherx != fathery){
union(fatherx, fathery);
}
}else {
fatherx = find(map.get(name1));
fathery = find(map.get(name2));
if(fatherx == fathery){
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
}

private static void union(int x, int y) {
disjointSet[x] = y;
}

private static int find(int val){
while (val != disjointSet[val]){
val = disjointSet[val];
}
return val;
}

private static void initData() {
for (int i = 0; i < len; i++) {
disjointSet[i] = i;
}
initVal = 0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  并查集 连通块