55 lines
1.1 KiB
C++
55 lines
1.1 KiB
C++
|
#include <bits/stdc++.h>
|
|||
|
using namespace std;
|
|||
|
|
|||
|
const int MAXN = 1e5 + 5;
|
|||
|
|
|||
|
//dep[u]<5D><><EFBFBD><EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//leaf[u]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>uΪ<75><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD>Ǹ<EFBFBD>Ҷ<EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>
|
|||
|
int n , m , rt , leaf[MAXN] , dep[MAXN];
|
|||
|
|
|||
|
vector<int> graph[MAXN];
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>dep[u]<5D><>leaf[u]
|
|||
|
int dfs(int u, int fa) { // <20><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
dep[u] = dep[fa] + 1;
|
|||
|
// u<><75>Ҷ<EFBFBD>ӽڵ<D3BD>
|
|||
|
if(graph[u].size()==1) {
|
|||
|
leaf[u] = dep[u];
|
|||
|
return leaf[u];
|
|||
|
}
|
|||
|
for(int v : graph[u]) {
|
|||
|
if(v == fa) continue;
|
|||
|
|
|||
|
leaf[u] = min(dfs(v , u) , leaf[u]);
|
|||
|
}
|
|||
|
return leaf[u];
|
|||
|
}
|
|||
|
|
|||
|
// <20>ڵ<EFBFBD>u<EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>farmer<65><72><EFBFBD><EFBFBD>
|
|||
|
int dfs2(int u, int fa) {
|
|||
|
if(dep[u] - 1 >= leaf[u] - dep[u]) return 1;
|
|||
|
int cnt = 0;
|
|||
|
for (int v : graph[u]) {
|
|||
|
if (v == fa) continue;
|
|||
|
cnt += dfs2(v, u);
|
|||
|
}
|
|||
|
return cnt;
|
|||
|
}
|
|||
|
|
|||
|
int main() {
|
|||
|
// freopen("atlarge.in", "r", stdin);
|
|||
|
// freopen("atlarge.out", "w", stdout);
|
|||
|
|
|||
|
memset(leaf , 0x3f , sizeof(leaf));
|
|||
|
scanf("%d%d" , &n, &rt);
|
|||
|
for(int i = 0; i < n - 1 ; i++) {
|
|||
|
int u, v;
|
|||
|
scanf("%d%d" , &u , &v);
|
|||
|
graph[u].push_back(v);
|
|||
|
graph[v].push_back(u);
|
|||
|
}
|
|||
|
dfs(rt , 0);
|
|||
|
printf("%d\n" , dfs2(rt, 0));
|
|||
|
return 0;
|
|||
|
}
|