๋ฌธ์
์ฝ๋
/*
๋ณธ์ธ์ด ์ผ๋ฆฌ์ด๋ตํฐ๋ผ๋ฉด ์์๋
ธ๋๋ ์ผ๋ฆฌ์ด๋ตํฐ ์ด๊ฑฐ๋ ์๋์ด๋ ๋๋ค.
๋ณธ์ธ์ด ์ผ๋ฆฌ์ด๋ตํฐ๊ฐ ์๋๋ผ๋ฉด ์์ ๋
ธ๋๋ ๋ฐ๋์ ์ผ๋ฆฌ์ด๋ตํฐ์ฌ์ผ ํ๋ค.
*/
#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๋ฒ์ด ์ผ๋ฆฌ์ด๋ตํฐ์ผ ๋์ ์๋ ๋์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 11561๋ฒ - ์ง๊ฒ๋ค๋ฆฌ (0) | 2022.09.07 |
---|---|
[๋ฐฑ์ค,c++] 11663๋ฒ - ์ ๋ถ ์์ ์ (0) | 2022.09.06 |
[๋ฐฑ์ค,c++] 17136๋ฒ - ์์ข ์ด ๋ถ์ด๊ธฐ (0) | 2022.09.06 |
[๋ฐฑ์ค,c++] 15681๋ฒ - ํธ๋ฆฌ์ ์ฟผ๋ฆฌ (0) | 2022.09.04 |
[๋ฐฑ์ค,c++] 10775๋ฒ - ๊ณตํญ (0) | 2022.09.02 |
[๋ฐฑ์ค,c++] 4195๋ฒ - ์น๊ตฌ ๋คํธ์ํฌ (0) | 2022.09.02 |
๋๊ธ