先看看我的代码
// LG-P1364.cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=5e5+5;
const ll INF=0x3f;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int n,pos;
int sz[MAXN],vis[MAXN],dist[MAXN];
int a[MAXN];
ll ans,sum;
vector<int> edge[MAXN];
void dfs(int rt,int d){
int u=rt;
sz[u]=a[u];
vis[u]=1;
dist[u]=d;
ll cnt=0;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
if(vis[v])
continue;
dfs(v,d+1);
sz[u]+=sz[v];
cnt=max(cnt,1LL*sz[v]);
}
cnt=max(cnt,sum-sz[u]);
if(cnt<ans||(cnt==ans&&u<pos)){
pos=u;
ans=cnt;
}
return ;
}
int init(){
n=read();
for(int i=1;i<=n;i++){
int w,x,y;
w=read(),x=read(),y=read();
a[i]=w;
sum+=a[i];
if(x!=0){
edge[i].push_back(x);
edge[x].push_back(i);
}
if(y!=0){
edge[i].push_back(y);
edge[y].push_back(i);
}
}
}
int print(){
ans=INF;
pos=1;
dfs(1,0);
for(int i=1;i<=n;i++)
vis[i]=0;
dfs(pos,0);
ans=0;
for(int i=1;i<=n;i++){
ans+=dist[i]*a[i];
}
}
int main(){
init();
print();
cout<<ans<<endl;
return 0;
}
我是真不知道哪里错了,调了1小时
希望有dalao指出错误
3 4 5WA掉了