๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 19542๋ฒˆ - ์ „๋‹จ์ง€ ๋Œ๋ฆฌ๊ธฐ

by ์•ˆ์ฃผํ˜• 2022. 8. 14.

๋ฌธ์ œ

 

19542๋ฒˆ: ์ „๋‹จ์ง€ ๋Œ๋ฆฌ๊ธฐ

ํ˜„๋ฏผ์ด๋Š” ํŠธ๋ฆฌ ๋ชจ์–‘์˜ ๊ธธ ์œ„์—์„œ ์˜คํ† ๋ฐ”์ด๋ฅผ ํƒ€๊ณ  ์ „๋‹จ์ง€๋ฅผ ๋Œ๋ฆฌ๋ ค๊ณ  ํ•œ๋‹ค. ํ˜„๋ฏผ์ด์˜ ๋ชฉํ‘œ๋Š” ์ผ€๋‹ˆ์†Œํ”„ํŠธ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ์— ์ „๋‹จ์ง€๋ฅผ ๋Œ๋ฆฌ๊ณ , ๋‹ค์‹œ ์ผ€๋‹ˆ์†Œํ”„ํŠธ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒƒ์ด๋‹ค. ํ˜„๋ฏผ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

vector<int>graph[100001];
int depth[100001];
int N, S, D, ans = 0;


int dfs(int node, int before){
    for(auto next: graph[node]){
        if(next != before){
            depth[node] = max(depth[node], dfs(next, node)+1);  // ๊ฐ ๋…ธ๋“œ์˜ ๊นŠ์ด ์ž์†๋“ค ์ค‘ ๊ฐ€์žฅ ๊นŠ์€ ๋…ธ๋“œ์˜ ๊นŠ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ
        }
    }
    if(depth[node]>=D && node != S) ans++;
    return depth[node];
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N>>S>>D;
    for(int i=0; i<N-1; i++){
        int a,b; cin>>a>>b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    
    dfs(S, -1);
    
    cout<<ans*2;
    
}

 

ํ’€์ด

์ž…๋ ฅ์—์„œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 100,000๊นŒ์ง€ ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— dfs๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๋Œ์•„์„œ ํ’€์–ด์•ผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์œ„ ์ฝ”๋“œ์˜ ์ด ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ํ•ต์‹ฌ ๋กœ์ง์ž…๋‹ˆ๋‹ค.

depth[node] = max(depth[node], dfs(next, node)+1);  // ๊ฐ ๋…ธ๋“œ์˜ ๊นŠ์ด ์ž์†๋“ค ์ค‘ ๊ฐ€์žฅ ๊นŠ์€ ๋…ธ๋“œ์˜ ๊นŠ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ

์œ„ ๋กœ์ง์„ ๋Œ๊ฒŒ๋˜๋ฉด depth๋Š” ์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ์ €์žฅ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • depth[node]๋Š” ๊ฐ ๋…ธ๋“œ ์•„๋ž˜๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค ์ค‘ ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๊ธธ์ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • 2๋ฒˆ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ๋Š” 3๋ฒˆ๊ณผ 4๋ฒˆ ๋‘ ๊ฐœ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ, 3๋ฒˆ ๋…ธ๋“œ๊ฐ€ 5, 6๋ฒˆ ๋…ธ๋“œ ๋‘ ๊ฐœ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด 4๋ฒˆ ๋…ธ๋“œ๋ณด๋‹ค ๊ธธ์–ด์ ธ 2๋ฒˆ ๋…ธ๋“œ์˜ depth๋Š” 3๋ฒˆ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ 3์ด ๋ฉ๋‹ˆ๋‹ค.

depth[node]๊ฐ€ D์ด์ƒ์ด ๋˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋Š” ํ•„์ˆ˜๋กœ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ans++์„ ํ•ด์ค๋‹ˆ๋‹ค. (์ฒซ ๋ฒˆ์งธ ์‹œ์ž‘์ ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

๊ทธ ํ›„ ์™•๋ณต์„ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ans *2๋ฅผ ํ•˜์—ฌ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€