-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2533.cpp
More file actions
46 lines (42 loc) · 991 Bytes
/
Copy path2533.cpp
File metadata and controls
46 lines (42 loc) · 991 Bytes
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <vector>
using namespace std;
int n;
int dp[1000001][2];
vector<vector<int>> edges;
vector<int> visited;
void solve(int node)
{
visited[node] = 1;
dp[node][0] = 0;
dp[node][1] = 1;
for (int i = 0; i < edges[node].size(); i++)
{
int child = edges[node][i];
if (visited[child])
continue;
solve(child);
dp[node][0] += dp[child][1];
dp[node][1] += min(dp[child][0], dp[child][1]);
}
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
// visited 초기화, 1부터 탐색할거니까 크기는 n+1
edges.resize(n + 1);
visited.resize(n + 1);
// edges 초기화
int u, v;
for (int i = 1; i < n; i++)
{
cin >> u >> v;
// 양방향 그래프 생성
edges[u].push_back(v);
edges[v].push_back(u);
}
solve(1);
cout << min(dp[1][0], dp[1][1]);
}