为什么CE了呀?
查看原帖
为什么CE了呀?
124676
JimmyFlower楼主2024/8/9 10:08

Rt,本地编译过了,洛谷没过,我很少用vector所以不太了解,下面是编译信息。

Can't compile file:
program.cpp:22:2: error: 'vector' does not name a type
  vector<int> son;
  ^~~~~~
program.cpp: In function 'void treedp(int)':
program.cpp:26:14: error: 'struct tree' has no member named 'son'
  if(!tr[now].son.size()){tr[now].dmax=tr[now].x;return;}
              ^~~
program.cpp:27:23: error: 'struct tree' has no member named 'son'
  for(ui i=0;i<tr[now].son.size();i++)
                       ^~~
program.cpp:29:19: error: 'struct tree' has no member named 'son'
   int son=tr[now].son[i];
                   ^~~
program.cpp: In function 'void solve()':
program.cpp:42:9: error: 'struct tree' has no member named 'son'
   tr[i].son.clear(),tr[i].dmax=MAXN;
         ^~~
program.cpp:46:24: error: 'struct tree' has no member named 'son'
   scanf("%d",&x),tr[x].son.push_back(i);
                        ^~~
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ri register int
#define ui unsigned int
using namespace std;
typedef long long ll;
const int MAXN=2147483646;
int T,n,x;
struct tree
{
	int x,f,dmax;
	vector<int> son;
}tr[200010];
void treedp(int now)
{
	if(!tr[now].son.size()){tr[now].dmax=tr[now].x;return;}
	for(ui i=0;i<tr[now].son.size();i++)
	{
		int son=tr[now].son[i];
		treedp(son);
		tr[now].dmax=min(tr[now].dmax,tr[son].dmax);
	}
	if(now!=1&&tr[now].dmax>tr[now].x)
		tr[now].dmax=tr[now].x+(tr[now].dmax-tr[now].x)/2;
}
void solve()
{
	scanf("%d",&n);
	for(ri i=1;i<=n;i++)
	{
		scanf("%d",&tr[i].x);
		tr[i].son.clear(),tr[i].dmax=MAXN;
		tr[i].f=tr[i].x;
	}
	for(ri i=2;i<=n;i++)
		scanf("%d",&x),tr[x].son.push_back(i);
	treedp(1);
	printf("%d\n",tr[1].x+tr[1].dmax);
}
int main()
{
	scanf("%d",&T);
	while(T--) solve();
	return 0;
}
2024/8/9 10:08
加载中...