๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #1068 ํŠธ๋ฆฌ

by dar0m! 2020. 4. 17.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
 2์ดˆ  128MB 25.526%
 

1068๋ฒˆ: ํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์— ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด (๋ฃจํŠธ) -1์ด ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„์—๋Š” ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ž€, ์ž์‹์˜ ๊ฐœ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค.
ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ ๋•Œ, ๋‚จ์€ ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ฒซ์งธ ์ค„์— ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด (๋ฃจํŠธ) -1์ด ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„์—๋Š” ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ํŠธ๋ฆฌ์—์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋…ธ๋“œ๋ฅผ ์ง€์› ์„ ๋•Œ, ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ•ด๊ฒฐ

key point, ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ 0์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ณ„์† ์ด์ƒํ•˜๊ฒŒ ํ‹€๋ฆฌ๊ธธ๋ž˜ ์งˆ๋ฌธ ๊ฒ€์ƒ‰์—์„œ ๋ฐ˜๋ก€๋ฅผ ์ฐพ์•„๋ดค๋Š”๋ฐ ์ •๋ง ๊ฟ€๊ฐ™์€ ๋ฐ˜๋ก€๋ฅผ ์ฐพ์•˜๋‹ค.

Testcase

7
3 6 6 -1 0 6 3
4

์ถœ๋ ฅ → 4

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋„์‹ํ™”ํ•˜๋ฉด ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋œ๋‹ค. ์ด ์ฒ˜๋Ÿผ '๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.'๋ผ๊ณ  ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์กŒ์ง€๋งŒ, ๋ฃจํŠธ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฃผ์–ด์ง„๋‹จ ๋ง์€ ์—†์œผ๋ฏ€๋กœ -1์ด ์ž…๋ ฅ์„ ๋•Œ ๋น„๋กœ์†Œ ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ๋…ธ๋“œ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋˜ ์œ ์˜ํ•  ์ ์€,

๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ๋‹ต์€ 0์ด๊ณ ,

ํŽธํ–ฅํŠธ๋ฆฌ์ผ ๋•Œ ๋ฆฌํ”„๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ž˜ ์„ธ๊ณ  ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•œ๋‹ค.

์ฒ˜์Œ์— ํ–ˆ๋˜ ๋ฐฉ์‹์€
๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ๋…ธ๋“œ ์ž์ฒด๋ฅผ ์—†์• ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜๋ฏธ์— ์ง‘์ค‘ํ•˜์—ฌ chk[] ๋ฐฐ์—ด์— 1์„ ๋„ฃ์–ด์„œ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ , ์ƒˆ๋กญ๊ฒŒ ๋ฃจํŠธ๋ถ€ํ„ฐ ์ˆœํ™˜ํ•˜๋ฉฐ ํ•ด๋‹น๋…ธ๋“œ์— ์ž์‹์ด ์—†์–ด์•ผ์ง€๋งŒ ๊ฐœ์ˆ˜๋ฅผ ์…Œ๋‹ค. → ์ธ์ ‘๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 0์ผ ๋•Œ
๊ทธ๋ž˜์„œ ํŽธํ–ฅํŠธ๋ฆฌ์ผ ๋•Œ ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด, 1์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 0์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

์ด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ DFSํ•จ์ˆ˜ ๋‚ด์— cnt๋ผ๋Š” ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋‘์–ด์„œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด๋‘” ํ›„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์„œ ๋งˆ์ง€๋ง‰๊นŒ์ง€ 0์ด๋ผ๋ฉด ๋ฆฌํ”„๋…ธ๋“œ๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด

  1. DFS
  2. -1์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•˜์„ ๋•Œ ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ์ •ํ•ด์ง„๋‹ค.
  3. ๋…ธ๋“œ์‚ญ์ œ๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์‚ญ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋กœ ์ฒดํฌํ–ˆ๋‹ค.
  4. ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฆฌํ”„๋…ธ๋“œ ํƒ์ƒ‰์„ ํ•  ๋•Œ root๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  5. cnt๊ฐ€ 0์œผ๋กœ ์œ ์ง€๋  ๋•Œ๋งŒ ๋ฆฌํ”„๋…ธ๋“œ๋กœ ํŒ๋‹จํ•˜์—ฌ ans๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ํƒ์ƒ‰์„ ๋งˆ์นœ ๋’ค ans์„ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต์ด๋‹ค.

flg๋ณ€์ˆ˜์˜ ์˜๋ฏธ๋Š” ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ans๋ณ€์ˆ˜์— ๋ณ€ํ™”๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ๋…ธ๋“œ ์‚ญ์ œ ํ›„ flg๋ฅผ 1๋กœ ๋ฐ”๊พธ๊ณ  DFS(root) ํƒ์ƒ‰์„ ๋‹ค์‹œ ์ง„ํ–‰ํ–ˆ๋‹ค.

 

์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
 1984KB  0ms
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
31
32
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int n, root, rm, chk[55], flg, ans;
vector<int> v[55];
void dfs(int num) {
    chk[num] = 1;
    int cnt = 0;
    for (auto child : v[num]) {
        if (chk[child]) continue;
        chk[child] = 1;
        cnt++;
        dfs(child);
    }
    if (flg && cnt == 0) ans++;
}
 
int main() {
    scanf("%d"&n);
    for (int i = 0, a; i < n; i++) {
        scanf("%d"&a);
        if (a == -1) { root = i; continue; }
        v[a].push_back(i);
    }
    scanf("%d"&rm);
    dfs(rm);
    flg = 1;
    if (rm != root) dfs(root);
    printf("%d", ans);
    return 0;
}
cs

 

 

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ฒจ๋ถ€

ํŠธ๋ฆฌ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค.txt
0.00MB

๋Œ“๊ธ€