luogu_1346 电车

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn=110;
const int INF=1<<30;
struct edge{int v,t;};
int n,s,t,d[maxn];
queue<int> q;
vector<edge> G[maxn];
bool vis[maxn];

void spfa(){
	for(int i=1;i<=n;i++)d[i]=INF;
	q.push(s); d[s]=0; vis[s]=1;
	while(!q.empty()){
		int u=q.front(); q.pop(); vis[u]=0;
		for(int i=0;i<G[u].size();i++){
			int v=G[u][i].v,k=G[u][i].t;
			if(d[v]>d[u]+k){
				d[v]=d[u]+k;
				if(!vis[v]){q.push(v); vis[v]=1;}
			}
		}
	}
}

int main(){
	scanf("%d%d%d",&n,&s,&t);
	for(int i=1;i<=n;i++){
		int m;
		scanf("%d",&m);
		for(int j=1;j<=m;j++){
			int v;
			scanf("%d",&v);
			if(j==1)G[i].push_back((edge){v,0});
			else G[i].push_back((edge){v,1});
		}
	}
	spfa();
	if(d[t]==INF)puts("-1");
	else printf("%d\n",d[t]);
	return 0;
}

  

posted @ 2017-09-21 21:21  wqtnb_tql_qwq_%%%  阅读(125)  评论(0编辑  收藏  举报