跟着题解思路做的,前三个WA,后面RE,MLE.dalao帮我看一下哪里有问题叭,,(暴力都能拿30分啊喂
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,T,pos,poss,j,v1,v2,x;
int m,i,maxn,maxnn;
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
long long a[n+1];
bool pd[n+1][n+1];
memset(pd,0,sizeof(pd));
for(i=1;i<=n;++i)
{
scanf("%d",&a[i]);
}
if(n==1) printf("%d\n",1);
else
{
for(i=1;i<n;++i)
{
scanf("%d%d",&v1,&v2);
pd[v1][v2]=1;
pd[v2][v1]=1;
}
maxn=a[n];pos=n;
for(int x=n-1;x>=1;--x)
{
if(a[x]>=maxn)
{
maxn=a[x];
pos=x;
}
}
maxnn=-1e18;
for(i=n;i>=1;--i)
if(pd[pos][i]&&a[i]>=maxnn&&i!=pos)
{
maxnn=a[i];
poss=i;
}
if(maxn-maxnn>m) printf("%d\n",pos);
else if(maxn-maxnn==m) printf("%d\n",min(pos,poss));
else if(m-(maxn-maxnn)%2!=0) printf("%d\n",max(pos,poss));
else if(m-(maxn-maxnn)%2==0) printf("%d\n",min(pos,poss));
}
}
return 0;
}