泛链Dfs
#include <stdio.h> #include <stdlib.h> #define N 400002 int n,p,k,ft[N],ed[N],nt[N],va[N],L,nx[N],s[N],as; void add(int a,int b,int v) {nt[++L]=ft[a];ed[L]=b;ft[a]=L;va[L]=v;} void dfs(int o,int f,int v) { for (;v>k;v-=s[f],f=nx[f]); as+=(v==k); for (int i=ft[o],e;i;i=nt[i]) {e=ed[i]; if (nx[e]) continue; nx[o]=e;s[o]=va[i];dfs(e,f,v+va[i]); } } int main() {scanf("%d%d%d",&n,&p,&k); for (int i=1,a,b,v;i<n;i++) {scanf("%d%d%d",&a,&b,&v);add(a,b,v);add(b,a,v);} dfs(p,p,0); printf("%d\n",as); return 0; }
时间: 2024-10-08 10:19:24