• 洛谷 P1346 电车


    这道题的关键在建图

    把每一个车站看成一个点,将这个车站相连的第一个车站建立一条边权为0的边,对于它所相连的其他车站,建立边权为1的边;

    这样我们可以得到一张图;

    起点,终点都知道了,跑一边最短路即可

    最短路可以用spfa,floyd,迪杰斯特拉;

    因为n只有200,跑遍floyd就行;

    但是还有一个小细节;

    对于我们建的每一条边,都只是单向边,不要加上f【i】【j】=f【j】【i】;

    附ac代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<string>
     6 #include<queue>
     7 #include<cmath> 
     8 #include<ctime>
     9 const int MAXN=100+5;
    10 const int INF=0x3f3f3f;
    11 int dis[MAXN][MAXN];
    12 int main()
    13 {
    14     int n,a,b;
    15     int c,d;
    16     scanf("%d %d %d",&n,&a,&b);
    17     for(int i=1;i<=MAXN-2;i++)
    18         for(int j=1;j<=MAXN-2;j++)
    19             dis[i][j]=INF;
    20     for(int i=1;i<=n;i++)
    21     {
    22         scanf("%d",&c);
    23         for(int j=1;j<=c;j++)
    24         {
    25             scanf("%d",&d);
    26             j==1?dis[i][d]=0:dis[i][d]=1;
    27         }
    28     }
    29 
    30     for(int k=1;k<=n;k++)
    31         for(int i=1;i<=n;i++)
    32             for(int j=1;j<=n;j++)
    33                 dis[i][j]=std::min(dis[i][j],dis[i][k]+dis[k][j]); 
    34     dis[a][b]==INF?printf("-1"):printf("%d",dis[a][b]); 
    35 
    36     return 0;
    37 
    38 }

    更多代码请进入:https://github.com/tomatoschool

  • 相关阅读:
    JavaScript入门二
    JavaScript入门
    CSS样式之补充
    CSS样式之操作属性二
    隔空手势操作
    项目管理培训(2)
    uoot启动过程
    new work
    库函数开发步骤 (转)
    keil(持续更新)
  • 原文地址:https://www.cnblogs.com/zxfzxf/p/9573184.html
Copyright © 2020-2023  润新知