求问为什么样例没过?
查看原帖
求问为什么样例没过?
1329138
luogu_hezhenmin1楼主2025/7/26 20:59
#include<bits/stdc++.h>
using namespace std;
int n,k;
const int N=1e5+2;
int to[N<<1],nxt[N<<1],head[N],cnt;
void add(int u,int v){
    to[++cnt]=v,nxt[cnt]=head[u],head[u]=cnt;
}
int dp[N][25],a[N];
void dfs(int u,int fa){
    dp[u][0]=a[u];
    for(int i=head[u];i;i=nxt[i]){
        int v=to[i];
        if(v==fa) continue;
        dfs(v,u);
        for(int j=1;j<=k;j++) dp[u][j]+=dp[v][j-1];
    }
}
int ans;
void dfs1(int u,int fa){
    for(int i=head[u];i;i=nxt[i]){
        int v=to[i];
        if(v==fa) continue;
        for(int j=k;j>=2;j--) dp[v][j]-=dp[v][j-2];
        for(int j=1;j<=k;j++)  dp[v][j]+=dp[u][j-1];
        dfs(v,u);
    }
}
int main(){
    cin>>n>>k;
    for(int i=1;i<n;i++){
        int u,v;cin>>u>>v;
        add(u,v),add(v,u);
    }
    for(int i=1;i<=n;i++) cin>>a[i];
    dfs(1,-1); dfs1(1,-1);
    for(int i=1;i<=n;i++){
        ans=0;for(int j=0;j<=k;j++) ans+=dp[i][j];
        cout<<ans<<'\n';
    }
}
2025/7/26 20:59
加载中...