https://www.acmicpc.net/problem/14675
14675번: 단절점과 단절선
프로그램의 입력은 표준 입력으로 받는다. 입력의 첫 줄에는 트리의 정점 개수 N이 주어진다. (2 ≤ N ≤ 100,000) 트리의 정점은 1번부터 n번까지 존재한다. 다음 줄부터 N-1개의 줄에 걸쳐 간선의 정
www.acmicpc.net
기억해야할점입니다.
첫번째, 트리에서 단절점과 단절선 구하는방법
트리(Tree) : 사이클이 존재하지 않으며, 모든 정점이 연결되어 있는 그래프입니다.
단절점 구하는 방법 : 삭제할려는 노드가 끝 정점이 아니라면 단절점이 됩니다.
즉, 연결된 간선개수가 2개 이상이라면 단절점이 됩니다.
단절선 구하는 방법 : 모든 간선이 단절선이다. (사이클이 존재하지 않기에 모든 간선이 단절선입니다.)
t가 2라면 모든 간선은 단절선이므로 바로 "yes"를 출력합니다.
t가 1이면 연결된 간선의 개수가 2 이상이라면 단절점입니다. 1이면 끝점이므로 단절점이 아닙니다.
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static ArrayList<ArrayList<Node>> graph = new ArrayList<ArrayList<Node>>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N=sc.nextInt();
for(int i=0;i<=N;i++) {
graph.add(new ArrayList<Node>());
}
for(int i=1;i<N;i++) {
int start = sc.nextInt();
int end = sc.nextInt();
graph.get(start).add(new Node(end));
graph.get(end).add(new Node(start));
}
int q = sc.nextInt();
for(int i=0;i<q;i++) {
int t = sc.nextInt();
int k = sc.nextInt();
if(t == 2) {
System.out.println("yes");
}
if(t == 1) {
if(graph.get(k).size() >= 2) {
System.out.println("yes");
}else {
System.out.println("no");
}
}
}
}
static class Node{
int index;
public Node(int index) {
this.index = index;
}
}
}
'알고리즘 > Tree' 카테고리의 다른 글
[백준] 1967 트리의 지름 - 골드4, DFS + 트리(Tree) 자바 (0) | 2023.01.13 |
---|---|
[백준] 나무 위의 빗물 - 골드5, 트리(Tree) (0) | 2023.01.12 |
[백준] 트리 - 골드5, 트리(Tree) (0) | 2023.01.12 |
[백준] 1991 트리 순회 - 실버1, 트리(Tree) + DFS (0) | 2023.01.11 |
[백준] 11725 트리의 부모 찾기 - 트리(Tree) + DFS(깊이우선탐색) JAVA (0) | 2023.01.11 |