baekjoon 20260308
This commit is contained in:
parent
e0fc579755
commit
04c483ae12
56
code_study/Baekjoon/c/2533.c
Normal file
56
code_study/Baekjoon/c/2533.c
Normal file
@ -0,0 +1,56 @@
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define MAX_N 1000000
|
||||
|
||||
int dp[MAX_N + 1][2];
|
||||
bool visited[MAX_N + 1];
|
||||
|
||||
int head[MAX_N + 1];
|
||||
int to[MAX_N * 2 + 1];
|
||||
int next[MAX_N * 2 + 1];
|
||||
int edge_cnt = 0;
|
||||
|
||||
void add_edge(int u, int v) {
|
||||
edge_cnt++;
|
||||
to[edge_cnt] = v;
|
||||
next[edge_cnt] = head[u];
|
||||
head[u] = edge_cnt;
|
||||
}
|
||||
|
||||
int min(int a, int b) {
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
void find(int node) {
|
||||
visited[node] = true;
|
||||
dp[node][1] = 1;
|
||||
|
||||
for(int e = head[node]; e != 0; e = next[e]) {
|
||||
int child = to[e];
|
||||
|
||||
if(visited[child]) continue;
|
||||
|
||||
find(child);
|
||||
dp[node][1] += min(dp[child][1], dp[child][0]);
|
||||
dp[node][0] += dp[child][1];
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int N;
|
||||
if(scanf("%d", &N) != 1) return 0;
|
||||
|
||||
for(int i = 0; i < N - 1; i++) {
|
||||
int u, v;
|
||||
scanf("%d %d", &u, &v);
|
||||
add_edge(u, v);
|
||||
add_edge(v, u);
|
||||
}
|
||||
|
||||
find(1);
|
||||
|
||||
printf("%d\n", min(dp[1][0], dp[1][1]));
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user