(dfs)C. Kefa and Park

2018-07-27  本文已影响0人  laochonger

传送门:https://vjudge.net/problem/246619/origin

#include <iostream>
#include<cstdlib>
#include<stdio.h>
#include<algorithm>
#include<set>
#include<vector>
#include<assert.h>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef long long ll;
const ll mod = 1000000007;
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }

const int maxn = 1e5+5;
vector<int>G[maxn];
int a[maxn];
bool vis[maxn];
int out,m,n;

void init(){
    rep(i,1,n) G[i].clear();
    memset(vis,0,sizeof(vis));
    out = 0;
}

void dfs(int u,int cat){
    vis[u] = 1;
    if(cat>m)return ;
    int flag = 0;
    rep(i,0,G[u].size()-1){
        int v = G[u][i];
        if(!vis[v]){
            flag = 1;
            if(a[v]) dfs(v,cat+1);
            else dfs(v,0);
        }
    }
    if(flag==0) out++;
}

int main(){
    while(~scanf("%d%d",&n,&m)){
        init();
        rep(i,1,n) scanf("%d", &a[i]);
        rep(i,1,n-1){
            int u,v;
            scanf("%d%d", &u,&v);
            G[u].pb(v);
            G[v].pb(u);
        }
        dfs(1,a[1]);
        printf("%d",out);
    }
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读