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

[๋ฐฑ์ค€,c++] 2533๋ฒˆ - ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)

by ์•ˆ์ฃผํ˜• 2022. 9. 4.

๋ฌธ์ œ

 

2533๋ฒˆ: ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)

ํŽ˜์ด์Šค๋ถ, ํŠธ์œ„ํ„ฐ, ์นด์นด์˜คํ†ก๊ณผ ๊ฐ™์€ ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ์— ๋”ฐ๋ผ, ์‚ฌํšŒ๋ง์„ ํ†ตํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๋ฅผ ๋ฐ›์•„๋“ค์ด๊ฒŒ ๋˜๋Š”๊ฐ€๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ค‘์š”ํ•ด์กŒ๋‹ค. ์‚ฌํšŒ๋ง

www.acmicpc.net

 

์ฝ”๋“œ

/*
    ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๋ผ๋ฉด ์ž์‹๋…ธ๋“œ๋Š” ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ด๊ฑฐ๋‚˜ ์•„๋‹ˆ์–ด๋„ ๋œ๋‹ค.
    ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ž์‹ ๋…ธ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์—ฌ์•ผ ํ•œ๋‹ค.
*/

#include <iostream>
#include <vector>
using namespace std;

vector<int>graph[1000001];
int dp[1000001][2]; //๋ณธ์ธ์ด ์–ผ๋ฆฌ๋‹ตํ„ฐ์ผ๋–„, ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹๋•Œ
int N;

void dfs(int node, int before){
    dp[node][0] = 0;
    dp[node][1] = 1;
    for(auto next: graph[node]){
        if(next != before){
            dfs(next,node);
            dp[node][0] += dp[next][1];
            dp[node][1] += min(dp[next][0], dp[next][1]);
        }
    }
    
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N;
    for(int i=0; i<N-1; i++){
        int a, b; cin>>a>>b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    for(int i=0; i<100001; i++){
        dp[i][0] = 1e9;
        dp[i][1] = 1e9;
    }
    
    dfs(1, 0);
    cout<< min(dp[1][0], dp[1][1]);
}

 

ํ’€์ด

ํŠธ๋ฆฌ์—์„œ์˜ dp ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

dp[node][2] ์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์€ ์•„๋ž˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • dp[node][0]: ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹ ๋•Œ ๋ณธ์ธ ์ž์‹์˜ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ˆ˜
  • dp[node][1]: ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ผ ๋•Œ ๋ณธ์ธ ์ž์‹์˜ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ˆ˜

dfs ๋„์ž…๋ถ€์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด์„ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

  • dp[node][0] = 0;  ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ˆ˜๋ฅผ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 
  • dp[node][1] = 1;  ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ด๊ธฐ์— ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

๊ทธ ํ›„ dfs๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

  • dp[node][0] += dp[next][1];  ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ž์‹ ๋…ธ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • dp[node][1] += min(dp[next][0], dp[next][1]);  ๋ณธ์ธ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ๋ผ๋ฉด ์ž์‹ ๋…ธ๋“œ๋Š” ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ด๊ฑฐ๋‚˜ ์•„๋‹ˆ๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ ํ›„ ๋ฃจํŠธ ๋…ธ๋“œ์ธ 1๋ฒˆ์ด ์–ผ๋ฆฌ์–ด๋‹ตํ„ฐ์ผ ๋•Œ์™€ ์•„๋‹ ๋•Œ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€