题目描述:
雾。
题目分析:
DFS暴力找的话就有90了,雾
过不去的10分是链
考虑用倍增优化一下
题目链接:
Ac 代码:
#include <cstdio>
#include <iostream>
const int maxm=1e5+100;
int fa[maxm][18],sum[maxm][18];
int n,s;
int main()
{
scanf("%d%d",&n,&s);
for(int i=1;i<=n;i++)
scanf("%d",&sum[i][0]);
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
fa[v][0]=u;
}
for(int j=1;j<=17;j++)
for(int i=1;i<=n;i++)
{
fa[i][j]=fa[fa[i][j-1]][j-1];
sum[i][j]=sum[i][j-1]+sum[fa[i][j-1]][j-1];
}
int ans=0;
for(int i=1;i<=n;i++)
{
int now=i,nows=0;
for(int j=17;~j;j--)
{
if(sum[now][j]+nows<=s)
{
nows+=sum[now][j];
now=fa[now][j];
}
if(nows==s)
{
ans++;
break;
}
}
}
printf("%d\n",ans);
return 0;
}