题解:P12126 [蓝桥杯 2024 省 B 第二场] 狡兔 k 窟
yanzixuan2024 · · 题解
因为每个点
因为边权全部为
#include<bits/stdc++.h>
using namespace std;
const int maxn=5005;
int n,m,c[maxn];
vector<int> vec[maxn];
int step[maxn];
int bfs(int st,int en){
memset(step,-1,sizeof step);
queue<int> q;
q.push(st),step[st]=0;
while(!q.empty()){
int u=q.front();q.pop();
if(u==en) return step[en];
for(auto i:vec[u]){
if(step[i]==-1) q.push(i),step[i]=step[u]+1;
}
}
return 0;
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",c+i);
for(int i=1;i<n;++i){
int x,y;
scanf("%d %d",&x,&y);
vec[c[x]].push_back(c[y]),vec[c[y]].push_back(c[x]);
}
while(m--){
int x,y;
scanf("%d %d",&x,&y);
printf("%d\n",bfs(c[x],c[y]));
}
}