RT,C 题调了老半天了,被罚时了 6 次,WA on #10。
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
typedef long long ll;
using namespace std;
template<typename T>inline void read(T&x){
register int c=getchar();x=0;bool f=0;
for(;!isdigit(c);c=getchar())f^=!(c^45);
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
if(f)x=-x;
}
template<typename T,typename... Args>inline void read(T&x,Args&...args){
read(x);read(args...);
}
template<typename T>inline void write(T x){
static int sta[35];register int top=0;
if(x<0)x=-x,putchar('-');
do{sta[top++]=x%10,x/=10;}while(x);
while(top)putchar(sta[--top]+'0');
}
template<typename T>inline void write(T x,const char&c){
write(x),putchar(c);
}
const int N=1e5+5;
int T,n,k;
ll a[N],s[N],sum;
bool flag;
vector<int>e[N];
void dfs(int u,int fa){
s[u]=a[u];
for(int v:e[u]){
if(v==fa)continue;
dfs(v,u);
s[u]^=s[v];
}
}
int main(){
read(T);
while(T--){
read(n,k);flag=0;sum=0;
for(int i=1;i<=n;i++){
read(a[i]);sum^=a[i];e[i].clear();
}
for(int i=1,u,v;i<n;i++){
read(u,v);
e[u].push_back(v);
e[v].push_back(u);
}
if(!sum){puts("YES");continue;}
if(k<3){puts("NO");continue;}
dfs(1,0);
for(int i=2;i<=n;i++){
if(s[i]==0||s[i]==sum){
flag=1;
break;
}
}
puts(flag?"YES":"NO");
}
return 0;
}