洛谷 P1346 电车

来源:互联网 发布:科技成果登记软件 编辑:程序博客网 时间:2024/04/28 21:38

稍微包装过一下的最短路。

如果初始状态就是到达那个路口,就把权值搞为0,如果不是就搞为1;

然后跑最短路,我用的是SPFA,不过100的数据怎么跑都行吧。。


#include<iostream>#include<string.h>using namespace std;const int maxn=100;int n,a,b,k,map[maxn+1][maxn+1],que[100*maxn+1],head=1,tail=1,dis[maxn+1],top;bool flag[maxn+1];void read(){int i,j,l;std::ios::sync_with_stdio(false);memset(map,0x3f,sizeof(map));memset(dis,0x3f,sizeof(dis));cin>>n>>a>>b;for(i=1; i<=n; i++){cin>>k;for(j=1; j<=k; j++){cin>>l;if(j==1)map[i][l]=0;elsemap[i][l]=1;}}dis[a]=0;que[tail++]=a;while(head!=tail){top=que[head++];flag[top]=false;for(i=1; i<=n; i++)if(dis[i]>dis[top]+map[top][i]){dis[i]=dis[top]+map[top][i];if(flag[i]!=true){flag[i]=true; que[tail++]=i;}}}if(dis[b]>1000000)cout<<-1;elsecout<<dis[b];return;}int main(){read();return 0;}

AC。

0 0