#include using namespace std; const int MAXN = 1e5 + 5; //dep[u]代表u的深度 //leaf[u]代表以u为根的子树中,深度最浅的那个叶子节点的深度。 int n , m , rt , leaf[MAXN] , dep[MAXN]; vector graph[MAXN]; // 算出dep[u]和leaf[u] int dfs(int u, int fa) { // 返回距离u点最近的叶子节点深度 dep[u] = dep[fa] + 1; // u是叶子节点 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]; } // 节点u能够被控制所需的farmer数量 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; }