不过我感觉这道题的数据有点问题,WA了我好几次
这道题考点就是用SPFA求最短路
#include<cstdio> #include<queue> #include<cstring> #define INF 1000000000 using namespace std; int te[10009],map[10009][15]; int num[10009],res[10009]; int nr,first,nz; int MAX (int u,int v){ return u>v?u:v; } void BFS(int v){ int i,j,k,tem; for(i=0;i<=10000;i++) te[i]=INF; queue<int> que; que.push(v); te[v]=1; while(!que.empty()){ tem=que.front(); que.pop(); for(i=1;i<=num[tem];i++){ if(te[map[tem][i]]>te[tem]+1){ te[map[tem][i]]=te[tem]+1; que.push(map[tem][i]); } } } for(k=0;k<=10000;k++){ if(te[k]!=INF){ res[k]=MAX(res[k],te[k]); } } } int main(){ int t,T,i,j,id,tem,sum,k; int secon,ac,th; scanf("%d",&T); for(t=1;t<=T;t++){ scanf("%d %d",&nz,&nr); for(i=1;i<=nz;i++){ id; scanf("%d",&id); scanf("%d",&num[id]); for(j=1;j<=num[id];j++){ scanf("%d",&map[id][j]); } } for(i=0;i<=10000;i++) res[i]=-1; for(i=1;i<=nr;i++){ sum; scanf("%d",&sum); for(j=1;j<=sum;j++){ tem; scanf("%d",&tem); BFS(tem); } } ac=INF; for(i=0;i<=10000;i++){ if(res[i]!=-1){ if(ac>res[i]){ ac=res[i]; th=i; } } } printf("%d %d\n",ac,th); } }