0分求助,多次试图查找错误无果
查看原帖
0分求助,多次试图查找错误无果
399250
AffineRing楼主2021/3/13 10:41

我就找到重心之后统计一遍,然后就WA+RE+MLE

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
const int SIZE=105;
int nxt[SIZE<<1],ver[SIZE<<1],head[SIZE<<1],val[SIZE<<1],tot;
inline void add(int x,int y){
    ver[++tot]=y,nxt[tot]=head[x],head[x]=tot;
}
int n,ans=10000005,p,v[SIZE],s[SIZE],mxpt,sum;
void dfs(int x){
	v[x]=1,s[x]=val[x],mxpt=0;
	for(int i=head[x];i;i=nxt[i]){
		int y=ver[i];
		if(v[y])continue;
		dfs(y),s[x]+=s[y],mxpt=max(mxpt,s[y]);
	}
	mxpt=max(mxpt,sum-s[x]);
	if(mxpt<ans)ans=mxpt,p=x;
}
void mvrt(int x,int fa,int dep){
	ans+=val[x]*dep;
	for(int i=head[x];i;i=nxt[i]){
		int y=ver[i];
		if(y!=fa)mvrt(y,x,dep+1);
	}
}
int main(){
	n=read();
	for(int i=1;i<=n;i++){
		int z=read(),x=read(),y=read();
		val[i]=z,sum+=z;
		if(x)add(i,x),add(x,i);
		if(y)add(i,y),add(y,i);
	}
	dfs(1),ans=0,mvrt(p,-1,0);
	printf("%d\n",ans);
	return 0;
}
2021/3/13 10:41
加载中...