POJ - 1847 Tram(Floyd)
#include<iostream>
#include<cstring>
using namespace std;
const int N = 110;
int g[N][N];
int main()
{
memset(g,0x3f,sizeof g);
int n,A,B;cin>>n>>A>>B;
for(int i=1;i<=n;i++)
{
int k;cin>>k;
for(int j=0;j<k;j++)
{
int x;cin>>x;
if(j==0) g[i][x]=0;
else g[i][x]=1;
}
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
cout<<(g[A][B]==(0x3f3f3f3f)?-1:g[A][B]);
return 0;
}