Rt,这个警告有关系吗?
27:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(ri i=0;i<tr[now].son.size();i++)
^
#include<vector>
#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(ri i=0;i<tr[now].son.size();i++) //27行在这里
{
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;
}