测试点输出好像都对了,就是只有输出NO的点能过
#include<bits/stdc++.h>
#define LL long long
#define D double
using namespace std;
LL dis[1001][1001],inp[1001],inpp;
bool can[1001];
int main()
{
LL n,m;
cin>>m>>n;
memset(dis,0x3f,sizeof(dis));
getchar();
for(int i=1;i<=m;i++)
{
inpp=0;
char c='a';
int tmp=0;
while(1)
{
c=getchar();
if(c>='0'&&c<='9')
{
tmp*=10;
tmp+=c-48;
}
else
{
inp[++inpp]=tmp;
tmp=0;
if(c=='\n')break;
}
}
for(int j=1;j<=inpp;j++)
{
for(int jj=j;jj<=inpp;jj++)
{
if(j==jj)continue;
dis[inp[j]][inp[jj]]=1;
can[jj]=1;
}
}
}
// Temp(n);
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(dis[i][k]+dis[k][j]<dis[i][j])
{
can[j]=1;
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
if(!can[n])
cout<<"NO";
else
cout<<dis[1][n]-1;
return 0;
}