题意:
说人话:
从A到B连边 找从1到k的最短路 并输出路径(随便一条即可 )
如果不能到达 输出-1
思路:
搜
//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100500
int n,k,xx,yy,first[N],next[N],w[N],v[N],tot,vis[N],dis[N],zhuan[N];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void bfs(){
queue<int>q;q.push(1);
memset(dis,0x3f,sizeof(dis));dis[1]=0;
while(!q.empty()){
int x=q.front();q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=first[x];~i;i=next[i])
if(!vis[v[i]]&&dis[v[i]]>dis[x]+1){
zhuan[v[i]]=x;
dis[v[i]]=dis[x]+1;
q.push(v[i]);
}
}
}
void dfs(int x){
if(!x)return;
dfs(zhuan[x]);
printf("%d
",x);
}
int main(){
memset(first,-1,sizeof(first));
scanf("%d%df",&n,&k);
for(int i=1;i<=n;i++)scanf("%d%d",&xx,&yy),add(xx,yy);
bfs();
if(dis[k]<=0x3ffffff)printf("%d
",dis[k]+1),dfs(k);
else puts("-1");
}