这是只有90的代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b,w[100005],dis[1005][1005];
void floyd(){
for(int k = 1 ; k <= n ; k ++){
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= n ; j ++){
if(dis[i][j] > dis[i][k] + dis[k][j]){
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> a >> b;
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= n ; j ++){
dis[i][j] = 1000000000;
}
dis[i][i] = 0;
}
for(int i = 1 ; i <= n ; i ++){
int k;
cin >> k;
for(int j = 1 ; j <= k ; j ++){
cin >> w[j];
dis[i][w[j]] = min(dis[i][w[j]] , 1ll);
}
dis[i][w[1]] = 0ll;
}
floyd();
if(dis[a][b] >= 1000000000){
cout << -1;
}else{
cout << dis[a][b];
}
return 0;
}
/*
5 1 4
3 2 3 5
2 1 2
3 1 2 4
2 5 1
3 1 2 4
*/
这是100的
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b,w[100005],dis[1005][1005];
void floyd(){
for(int k = 1 ; k <= n ; k ++){
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= n ; j ++){
if(dis[i][j] > dis[i][k] + dis[k][j]){
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> a >> b;
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= n ; j ++){
dis[i][j] = 1000000000;
}
dis[i][i] = 0;
}
for(int i = 1 ; i <= n ; i ++){
int k;
cin >> k;
for(int j = 1 ; j <= k ; j ++){
cin >> w[j];
dis[i][w[j]] = min(dis[i][w[j]] , 1ll);
dis[i][w[1]] = 0ll;
}
}
floyd();
if(dis[a][b] >= 1000000000){
cout << -1;
}else{
cout << dis[a][b];
}
return 0;
}
/*
5 1 4
3 2 3 5
2 1 2
3 1 2 4
2 5 1
3 1 2 4
*/
我想问一下为什么把判断第一个放外面为什么会错