最后一个点wa,求助
查看原帖
最后一个点wa,求助
265716
malthel楼主2020/11/4 21:49
#include<bits/stdc++.h>
using namespace std;
int v[2000006];
struct Edge{
	int to,next;
}edge[4000006];
int last[4000006];
int cnt;
void add(int x,int y)
{
	cnt++;
	edge[cnt].to=y;
	edge[cnt].next=last[x];
	last[x]=cnt;
}
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
int main()
{
	int q;
	q=read();
	while(q--)
	{
		memset(last,0,sizeof(last));
		memset(v,0,sizeof(v));
		int n;
		int m;
		cnt=0;
		n=read();
		m=read();
		int max1=-1;
		int num1;
		for(int i=1;i<=n;i++)
		{
			v[i]=read();
			if(v[i]>max1)
			{
				max1=v[i];
				num1=i;
			}
		}
		for(int i=1;i<=n-1;i++)
		{
			int x,y;
			x=read();
			y=read();
//			cout<<x<<" "<<y<<endl; 
			add(x,y);
			add(y,x);
		}
		if(n==1)
		{
			cout<<num1<<endl;
			continue;
		}
		int max2=-1;
		int num2=edge[last[num1]].to;
		for(int i=last[num1];i;i=edge[i].next)
		{
			if(v[edge[i].to]>max2||(v[edge[i].to]==max2&&edge[i].to<num2))
			{
				max2=v[edge[i].to];
				num2=edge[i].to;
			}
		}
//		cout<<num1<<" "<<num2<<endl;
		if(max1-max2>m)
		{
			cout<<num1<<endl;
			continue;
		}
		else
		{
			if((m-max1+max2)%2==0)
			{
				if(num1<num2)
				{
					cout<<num1<<endl;
					continue;
				}
				else
				{
					cout<<num2<<endl;
					continue;
				}
			}
			if((m-max1+max2)%2!=0)
			{
				if(num1>num2)
				{
					cout<<num1<<endl;
					continue;
				}
				else
				{
					cout<<num2<<endl;
					continue;
				}
			}
		}
	}
	return 0;
}
2020/11/4 21:49
加载中...