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 |