티스토리 뷰

https://www.acmicpc.net/problem/4803

 

4803번: 트리

입력으로 주어진 그래프에 트리가 없다면 "No trees."를, 한 개라면 "There is one tree."를, T개(T > 1)라면 "A forest of T trees."를 테스트 케이스 번호와 함께 출력한다.

www.acmicpc.net

 

const input = require('fs').readFileSync('./dev/stdin').toString().trim().split('\n');

let edges;
let visited;
let tc = 1;
let i = 0;
while (i < input.length - 1) {
	const [N, M] = input[i].split(' ').map(Number);

	visited = Array(N).fill(false);
	edges = Array.from(Array(N), () => []);
	for (let m = 0; m < M; m++) {
		const [x, y] = input[i + m + 1].split(' ').map((x) => +x - 1);
		edges[x].push(y);
		edges[y].push(x);
	}

	let tree = 0;
	for (let i = 0; i < N; i++) {
		if (!visited[i]) {
			if (dfs(-1, i)) tree++;
		}
	}
	if (tree == 0) {
		console.log(`Case ${tc}: No trees.`);
	} else if (tree == 1) {
		console.log(`Case ${tc}: There is one tree.`);
	} else {
		console.log(`Case ${tc}: A forest of ${tree} trees.`);
	}
	tc++;
	i = i + M + 1;
}

function dfs(parent, now) {
	visited[now] = true;
	for (let i = 0; i < edges[now].length; i++) {
		const next = edges[now][i];
		if (parent == next) continue;
		if (visited[next]) return false; // 사이클
		else {
			if (!dfs(now, next)) return false; // 사이클
		}
	}
	return true;
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함