- 先读入数据,找出最大好感度及其村庄序号
- 之后操作每一个最大好感度的序号,增加其附近村庄的好感度,并依次来维护最大好感度及其村庄序号
- 然而就通过了第四点
struct pp
{
long long w;
int ai;
int a[3];
}q[2000005];
int t;
int n;
long long m;
int x,y;
int maxp;
long long maxw=0;
void addedge(int u,int v);
void oppoint(int u);
int main()
{
cin.sync_with_stdio(false);
cout.tie(0);
freopen("text.in","r",stdin);
cin >> t;
for(int i=1;i<=t;i++)
{
cin >> n >> m;
maxp=0;
maxw=0;
for(int j=1;j<=n;j++)
{
cin >> q[j].w;
if(maxw<q[j].w)
{
maxw=q[j].w;
maxp=j;
}
q[j].ai=0;
}
for(int j=1;j<n;j++)
{
cin >> x >> y;
addedge(x,y);
addedge(y,x);
}
for(long long j=1;j<=m;j++)
{
oppoint(maxp);
}
cout << maxp << endl;
}
return 0;
}
void addedge(int u,int v)
{
q[u].a[q[u].ai]=v;
q[u].ai++;
}
void oppoint(int u)
{
int tmp;
for(int i=0;i<q[u].ai;i++)
{
tmp=q[u].a[i];
q[tmp].w++;
if(maxw<q[tmp].w)
{
maxw=q[tmp].w;
maxp=tmp;
}
else if(maxw==q[tmp].w&&maxp>tmp)
{
maxp=tmp;
}
}
}