#85. [백준_C언어] 1068 : 트리 \ 트리

 

입력 코드

#include <stdio.h>

int N, M;
int p[50], c[50];
int ans;

void init(void)
{
	int i;

	scanf("%d", &N);
	for (i = 0; i < N; ++i)
	{
		scanf("%d", &p[i]);
		if (-1 != p[i]) ++c[p[i]];
	}

	scanf("%d", &M);
}

void func(void)
{
	int i, j;

	--c[p[M]];
	for (i = 0; i < N; ++i)
	{
		if (i == M) continue;
		if (0 == c[i])
		{
			j = i;
			while (-1 != j && M != j) j = p[j];
			if (-1 == j) ++ans;
		}
	}	
}

int main(void)
{
	init();
	func();
	printf("%d\n", (N == 2) ? 1 : ans);

	return 0;
}

출처 www.acmicpc.net/source/20604266

 

 

코드 설명

#트리 #그래프이론 #그래프탐색 #깊이우선탐색

 

 

 

문제 출처

www.acmicpc.net/problem/1068

 

1068번: 트리

첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다

www.acmicpc.net