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;
		}
	}
}

+ Recent posts