社区讨论

求调70pts

P2986[USACO10MAR] Great Cow Gathering G参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mliwj45z
此快照首次捕获于
2026/02/12 11:31
上周
此快照最后确认于
2026/02/14 17:35
5 天前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll dp[100010];
int cnt[100010];
ll n,sumcow;
struct road{
    int t,l;
};
vector<road> to[100010];

void dfs1(int u,int fa){
    for(auto v:to[u])
        if(v.t!=fa)
        {
              dfs1(v.t,u);cnt[u]+=cnt[v.t];
              dp[u] = dp[u] + dp[v.t] + v.l*cnt[v.t]; 
        }
}

void dfs2(int u,int fa,int l){
    if(u!=1)
        dp[u] = dp[fa] + (sumcow-2*cnt[u]) * l;
    for(auto v:to[u]){
        if(v.t!=fa)
            dfs2(v.t,u,v.l);
    }
}
//dp[u] = dp[fa] + (n-cnt[u]) * l - cnt[u] * l;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>cnt[i];sumcow += cnt[i];
    }
    for(int i=1;i<n;i++){
        int a,b,l;cin>>a>>b>>l;
        to[a].push_back((road){b,l});
        to[b].push_back((road){a,l});
    }
    dfs1(1,0);dfs2(1,0,0);
    ll ans = 1e16;
    for(int i=1;i<=n;i++){
        ans = min(ans,dp[i]);
    }
    cout<<ans;
    return 0;
}
样例过了,只有70分

回复

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

正在加载回复...