解题思路:
惯性思维硬刚等同于头铁撞墙
把连通的点集视为一个结点,结点相连,然后广搜路径
注意事项:
参考代码:
#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分
0 人评分
C语言训练-排序问题<1> (C++代码)浏览:632 |
C语言程序设计教程(第三版)课后习题9.3 (Java代码)浏览:1025 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:900 |
【偶数求和】 (C语言代码)浏览:588 |
简单的a+b (C语言代码)浏览:661 |
1014题解浏览:524 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:676 |
1124题解浏览:630 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:729 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:654 |