比赛 20230806测试 评测结果 C
题目名称 秀秀 最终得分 0
用户昵称 ┭┮﹏┭┮ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-08-06 11:40:28
显示代码纯文本
#include <bits/stdC++.h>
using namespace std;
const int N = 5010,mod = 786433;
int n,m;
struct made{
    int ver,nx;
}e[N*2];
int hd[N],tot,d[N],v[N],dp[N];
void add_(int x,int y){
    tot++;
    e[tot].ver = y,e[tot].nx = hd[x],hd[x] = tot;
}
int dfs(int x){
    v[x] = 1;
    d[x] = 1;
    for(int i = hd[x];i;i = e[i].nx){
        int y = e[i].ver;
        if(v[y])continue;
        d[x] += dfs(y);
    }
    return d[x];
}
void sou(int x){
    v[x] = 1;
    if(d[x] < m)return;
    int u = 0;
    for(int i = hd[x];i;i = e[i].nx){
        int y = e[i].ver;
        if(v[y])continue;
        sou(y);
        if(d[x] >= m)dp[x] = 1;
        //if(d[x]-d[y] >= m)u++;
    }
    //d[x] = 0;
    for(int i = hd[x];i;i = e[i].nx){
        int y = e[i].ver;
        if(d[y] >= m){
            dp[x] += dp[y];
        }
        //if(d[x]-d[y] < m)dp[x]--;
    }
}
int main(){
    freopen("xiuxiu.in","r",stdin);
    freopen("xiuxiu.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i = 1;i < n;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        add_(x,y);
        add_(y,x);
    }
    dfs(1);
    //for(int i = 1;i <= n;i++)cout<<d[i]<<' ';
    memset(v,0,sizeof(v));
    sou(1);
    printf("%d\n",dp[1]-1);
    
    return 0;
    
}