解题思路:
惯性思维硬刚等同于头铁撞墙
把连通的点集视为一个结点,结点相连,然后广搜路径
注意事项:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define MAX 0x3f3f3f3f
const int N = 5001;
typedef pair<int,int> pll;
map<pll,int> mp; vector<int> q[N]; queue<pll> p;
int main(){
int n,m,i,j,a[N],x,y,v[N];
cin>>n>>m;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<n;i++){
cin>>x>>y;
if(a[x]>a[y]) swap(x,y);
if(mp[pll(a[x],a[y])]) continue;
mp[pll(a[x],a[y])]=1;
q[a[x]].push_back(a[y]);
q[a[y]].push_back(a[x]);
}
while(m--){
cin>>x>>y;
if(a[x]==a[y]){ cout<<0<<'\n'; continue;}
memset(v,0,sizeof(v));
p.push(pll(a[x],0)); v[a[x]]=1; int f=0;
while(!p.empty()){
pll k=p.front(); p.pop();
for(auto j: q[k.first]){
if(!v[j]){
if(a[y]==j){ f=1; cout<<k.second+1<<'\n'; break;}
p.push(pll(j,k.second+1));
v[j]=1;
}
}
if(f) while(!p.empty()) p.pop();
}
}
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复