查找子树的结点数量
bfs
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
String s = buff.readLine();
int n = Integer.parseInt(s);
HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();//邻接表
ArrayList<Integer> arr = new ArrayList<>();//根结点的子节点
for(int i = 1; i <= n; i++){
map.put(i, new ArrayList<>());
}
while (buff.ready()) {
int[] s1 = Arrays.stream(buff.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
map.get(s1[0]).add(s1[1]);
map.get(s1[1]).add(s1[0]);
if(s1[0] == 1){
arr.add(s1[1]);
}
if(s1[1] == 1){
arr.add(s1[0]);
}
}
//BFS
int[] visit = new int[n + 1];
visit[1] = 1;
int sum = 0;
for(int i = 0; i < arr.size(); i++){
int node = arr.get(i), sumTemp = 0;
visit[node] = 1;
Queue<Integer> queue = new LinkedList<>();
queue.add(node);
while (!queue.isEmpty()) {
sumTemp++;
ArrayList<Integer> arrayList = map.get(queue.poll());
for(int j = 0; j < arrayList.size(); j++){
if(visit[arrayList.get(j)] == 0){
queue.add(arrayList.get(j));
visit[arrayList.get(j)] = 1;
}
}
}
sum = Math.max(sum, sumTemp);
}
System.out.println(sum);
}
}

京公网安备 11010502036488号