为什么评测姬的结果和本机测试答案不一样,wa了3个qwq
  • 板块P1364 医院设置
  • 楼主Xing_ke
  • 当前回复13
  • 已保存回复13
  • 发布时间2020/7/16 16:39
  • 上次更新2023/11/6 23:01:17
查看原帖
为什么评测姬的结果和本机测试答案不一样,wa了3个qwq
247546
Xing_ke楼主2020/7/16 16:39

第一个点测试输出‘0’,本地是正确答案4,

(可以用在线IDE看下)

样例: 3 1 2 3 2 0 0 2 0 0

(也有可能直接找树的重心,再统计答案的方法是错的……, 希望dalao帮忙指正QWQ

#include<bits/stdc++.h>
#define inf 0x3f3f3f
#define M 1001

using namespace std;
inline int read(){
	int x=0;int f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){ x=x*10+ch-'0';ch=getchar();	}
	return x*f;
}


int n,a[M];
int sz[M],f[M];
struct Node{
	int to,nxt;
}e[M<<1];
int cnt=0,head[M<<1];
inline void addl(int fr,int to){
	cnt++;
	e[cnt].to=to;
	e[cnt].nxt=head[fr];
	head[fr]=cnt;
}
inline void add(int fr,int to){
	addl(fr,to);addl(to,fr);
}
int dis=0;
inline void dfs(int x,int fa){
	sz[x]=1;
	for(int i=head[x];i;i=e[i].nxt){
		int y=e[i].to;
		if(y==fa)continue;
		dfs(y,x);
		sz[x]+=sz[y];
		f[x]=max(f[x],sz[y]);
	}
	f[x]=max(f[x],n-sz[x]);
}
inline void dff(int x,int fa,int dep){
	dep++;
	for(int i=head[x];i;i=e[i].nxt){
		int y=e[i].to;
		if(y==fa)continue;
		dff(y,x,dep);
		dis=dis+dep*a[y];
	}
	
}
int main(){
	n=read();
	for(int i=1;i<=n;++i){
		a[i]=read();
		int x=read(),y=read();
		if(x!=0)add(i,x);
		if(y!=0)add(i,y);
	}
	dfs(1,0);
	int pos,mis=f[1];
	for(int i=1;i<=n;++i){
		if(f[i]<mis){
			pos=i;mis=f[i];
		}
	}
	dff(pos,0,0);
	printf("%d",dis);
	return 0;
}

(不知所 ┗|`O′|┛ 嗷~~

2020/7/16 16:39
加载中...