社区讨论

洛谷的编译机太落后了,自己测对的,到这一测编译不过

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

讨论操作

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

当前回复
20 条
当前快照
1 份
快照标识符
@mi6hdxwx
此快照首次捕获于
2025/11/20 04:54
4 个月前
此快照最后确认于
2025/11/20 05:09
4 个月前
查看原帖
洛谷的编译机太落后了,我这个自己测对的,到这一测编译不过
CPP
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int M=100010;
int n,a,b,c,cnt;
int head[M],to[M/10],fa[M],next[M/10];
long long int  sum,s[M],val[M/10],ans,now;
void add(int a,int b,int c){
    to[cnt]=b;
    val[cnt]=c;
    next[cnt]=head[a];
    head[a]=cnt++;
}
void dfs(int x){
    for(int i=head[x];i!=-1;i=next[i]){
        if(to[i]!=fa[x]){
            fa[to[i]]=x;
            dfs(to[i]);
            s[x]+=s[to[i]];
            now+=val[i]*s[to[i]];
        }
    }
}
void dfs2(int x){
    for(int i=head[x];i!=-1;i=next[i]){
        if(to[i]!=fa[x]){
            long long int tmp=now-(s[to[i]]*2-sum)*val[i];    {
                swap(tmp,now);   
                ans=min(ans,now);
                dfs2(to[i]);
                swap(tmp,now);
            }
        }
    }
}
int main(){
    cin>>n;
    memset(head,-1,sizeof(head));
    for(int i=1;i<=n;i++)   
        cin>>s[i],sum+=s[i];
    for(int i=1;i<n;i++){
        cin>>a>>b>>c;
        add(a,b,c);
        add(b,a,c);
    }
    dfs(1);
    ans=now;
    dfs2(1);
    cout<<ans<<endl;
    return 0;
}

回复

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

正在加载回复...