题目传送门
解题思路:
关键在于建图。以每个站点为顶点,是否需要转换开关为边建图。之后就求一个最短路即可,这个题求最短路的方法有多种,鉴于数据这么小,那就用最暴力的
f
l
o
y
d
floyd
floyd吧,下面附上代码。
上代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int g[N][N];
int n;
void floyd()
{
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]);
}
}
}
}
int main()
{
int a,b;
memset(g,0x3f,sizeof g);
scanf("%d%d%d",&n,&a,&b);
for(int i = 1;i <= n;i++)
{
int k;
scanf("%d",&k);
for(int j = 1;j <= k;j++)
{
int x;
scanf("%d",&x);
if(j == 1) g[i][x] = 0;
else g[i][x] = 1;
}
}
floyd();
if(g[a][b]==0x3f3f3f3f) cout<<-1<<endl;
else
cout << g[a][b] << endl;
return 0;
}
很久之前遗留下的题目啦,现在再来捡一捡。