电车
题目
解析
这题真的是,打了个spfa,70pts……
怎么办呢?打Floyd!
70pts*2
在调了一段时间后发现了真相:
输入在i循环内部也定义了i
终于A了几天后的我:省略一亿字
好像有什么不对劲
那70pts怎么来的?
神了
已发帖:here
code:
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
int n,s,t,x,head[110],ans[110],tot=0,k;
struct f
{
int to,w,nxt;
}a[10010];
void add(int x,int y,int z)
{
a[++tot].to=y,a[tot].w=z,a[tot].nxt=head[x],head[x]=tot;
}
bool u[110];
queue <int> b;
void spfa()
{
u[s]=1,ans[s]=0,b.push(s);
while(!b.empty())
{
k=b.front(),b.pop();
u[k]=0;
for(int i=head[k];i;i=a[i].nxt)
{
if(a[i].w+ans[k]<ans[a[i].to])
{
ans[a[i].to]=ans[k]+a[i].w;
if(!u[a[i].to])
{
u[a[i].to]=1;
b.push(a[i].to);
}
}
}
}
if(ans[t]==0x7f7f7f7f)printf("-1");
else printf("%d",ans[t]);
return;
}
int main()
{
scanf("%d%d%d",&n,&s,&t);
for(int i=1;i<=n;i++)
{
ans[i]=0x7f7f7f7f;
scanf("%d",&k);
if(k==0)continue;
scanf("%d",&x);
add(i,x,0);
for(int j=2;j<=k;j++)
{
scanf("%d",&x);
add(i,x,1);
}
}
spfa();
return 0;
}