其实我是不能理解的。。。
查看原帖
其实我是不能理解的。。。
297806
Demeanor_Roy楼主2023/3/8 20:37
#include<bits/stdc++.h>
using namespace std;

const int N=2e5+10;
int n,w[N],p[N],dep[N],sz[N];
vector<int> vec[N];
inline void dfs(int u)
{
	sz[u]=1;dep[u]=dep[p[u]]+1;
	for(auto x:vec[u]) dfs(x),sz[u]+=sz[x];
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&w[i]);
	for(int i=2;i<=n;i++) scanf("%d",&p[i]),vec[p[i]].push_back(i);
	dfs(1);for(int i=1;i<=n;i++) p[i]=i;
	sort(p+1,p+n+1,[](int a,int b){return sz[a]-w[a]-dep[a]>sz[b]-w[b]-dep[b];});
	long long ans=0;
	for(int i=1;i<=n;i++) if(i&1) ans+=sz[p[i]]-w[p[i]]-dep[p[i]];
	printf("%lld",ans);
	return 0;
}

这份代码在 C++14 (GCC 9) 能过,但在 C++98 下 CE。

sort(p+1,p+n+1,[](int a,int b){return sz[a]-w[a]-dep[a]>sz[b]-w[b]-dep[b];});

sort(p+1,p+n+1,[](int a,int b){return sz[a]-w[a]-dep[a]>=sz[b]-w[b]-dep[b];});

并且只要将上面那句改成下面就会RE。

其实我是不能理解的。。。

2023/3/8 20:37
加载中...