提交时间:2025-10-08 15:06:05

运行 ID: 38449

#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,m,t,p[N],dis[N][105]; bool vis[N]; vector<int> a[N]; void dfs(int fa,int u,int d,int pa){ if(dis[u][pa]>d){ dis[u][pa]=d; for(int i=0;i<=pa;i++){ dis[u][i]=min(dis[u][i],d); //cout<<u<<" "<<pa<<" "<<dis[u][i]<<endl; } //cout<<u<<" "<<pa<<" "<<dis[u][pa]<<endl; } for(int i=0;i<a[u].size();i++){ int v=a[u][i]; if(v==fa||vis[v]) continue; vis[v]=1; dfs(u,v,d+1,pa); vis[v]=0; } } int main(){ memset(dis,0x3f,sizeof(dis)); scanf("%d %d %d",&n,&m,&t); for(int i=1;i<=n;i++){ scanf("%d",&p[i]); } for(int i=1;i<=m;i++){ int u,v; scanf("%d %d",&u,&v); a[u].push_back(v); a[v].push_back(u); } for(int i=1;i<=n;i++){ dfs(i,i,0,p[i]); } for(int i=1;i<=t;i++){ int x,q; scanf("%d %d",&x,&q); if(dis[x][q]>m){ printf("%d\n",-1); }else{ printf("%d\n",dis[x][q]); } } return 0; }