| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38462 | sea_water | 【J】T3 | C++ | 通过 | 100 | 508 MS | 46068 KB | 1205 | 2025-10-08 15:32:37 |
#include<bits/stdc++.h> using namespace std; int n,m,T,u,v; vector<int> p[100005],qq[105]; int qp[100001][101]; int pp[100005],mq,xs,qs,ans; struct xxs{ int x,len; }xx; queue<xxs> q; int main(){ // freopen("dinner.in","r",stdin); // freopen("dinner.out","w",stdout); scanf("%d%d%d",&n,&m,&T); for(int i=1;i<=n;i++){ scanf("%d",&pp[i]); qq[pp[i]].push_back(i); mq=max(mq,pp[i]); } for(int i=1;i<=mq;i++){ for(int j=1;j<=n;j++){ qp[j][i]=-1; } } for(int i=1;i<=m;i++){ scanf("%d%d",&u,&v); p[u].push_back(v); p[v].push_back(u); } for(int i=1;i<=mq;i++){ for(int j=0;j<qq[i].size();j++){ q.push({qq[i][j],0}); qp[qq[i][j]][i]=0; } while(q.size()){ xx=q.front(); q.pop(); for(int j=0;j<p[xx.x].size();j++){ if(qp[p[xx.x][j]][i]==-1){ qp[p[xx.x][j]][i]=xx.len+1; q.push({p[xx.x][j],xx.len+1}); } } } } while(T--){ ans=1000005; scanf("%d%d",&xs,&qs); if(qs>mq){ printf("-1\n"); continue; } for(int i=qs;i<=mq;i++){ if(qp[xs][i]!=-1){ ans=min(ans,qp[xs][i]); } } if(ans!=1000005){ printf("%d\n",ans); } else{ printf("-1\n"); } } }