社区讨论
洛谷的编译机太落后了,自己测对的,到这一测编译不过
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 条回复,欢迎继续交流。
正在加载回复...