社区讨论

求问为什么样例没过?

P3047[USACO12FEB] Nearby Cows G参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mdk9dwco
此快照首次捕获于
2025/07/26 21:01
7 个月前
此快照最后确认于
2025/11/04 03:40
4 个月前
查看原帖
CPP
#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';
    }
}

回复

1 条回复,欢迎继续交流。

正在加载回复...