• [ An Ac a Day ^_^ ] CodeForces 601A The Two Routes 最短路


    14号就ccpc全国赛的全国赛了 而且也快东北赛的选拔赛了

    现在队伍实力实在不行 参加了也是边缘化的队伍

    虽然有新生保护的设置

    但实话说 机会还是不大

    所以不如趁现在开始好好努力 明年也许还有机会

    An Ac a Day ( of course not keep a girl away ^_^ )

    题意呢 一个人开火车 一个人开大巴 火车走铁路 大巴走公路

    现在有n个城镇 每两个城镇之间都有路

    其中m条铁路 其他的都是公路 要求两个人都从1开始走 途中不相遇 问最快要多久

    题面比较诡异 两个人 还不允许相遇

    不过题中已经说了每两个城镇之间都有路 所以1到n之间一定有一条公路或一条铁路

    因此一定至少有一个人在t=1时就到了 这就不用考虑相遇的事了

    接下来对另外一个人最短路就好了~

    400的数据Floyd暴力都是可以的 不过闲着也是闲的 复习一下Dijkstra

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<math.h>
     5 #include<string.h>
     6 #include<string>
     7 #include<map>
     8 #include<set>
     9 #include<vector>
    10 #include<queue>
    11 #define M(a,b) memset(a,b,sizeof(a))
    12 #define ll long long
    13 using namespace std;
    14 const int inf=0x3f3f3f;
    15 bool vis[405];
    16 bool way[405][405];
    17 int lowcost[405];
    18 int n,m;
    19 void Dijkstra(){
    20     for(int i=1;i<=n;i++)
    21         lowcost[i]=inf;
    22     lowcost[1]=0;
    23     for(int i=1;i<=n;i++){
    24         int k=-1;
    25         int min_=inf;
    26         for(int j=1;j<=n;j++){
    27             if(!vis[j]&&lowcost[j]<min_){
    28                 min_=lowcost[j];
    29                 k=j;
    30             }
    31             if(k==-1) continue;
    32             vis[k]=true;
    33             for(int j=1;j<=n;j++){
    34                 if(!vis[j]&&lowcost[k]+way[k][j]<lowcost[j]&&way[k][j])
    35                     lowcost[j]=lowcost[k]+way[k][j];
    36             }
    37         }
    38     }
    39 }
    40 int main(){
    41     scanf("%d%d",&n,&m);
    42     int a,b;
    43     for(int i=0;i<m;i++){
    44         scanf("%d%d",&a,&b);
    45         way[a][b]=way[b][a]=true;
    46     }
    47     if(way[1][n])
    48         for(int i=1;i<=n;i++)
    49             for(int j=1;j<=n;j++)
    50                 if(i!=j) way[i][j]=!way[i][j];
    51     Dijkstra();
    52     if(lowcost[n]>=inf) printf("-1
    ");
    53     else printf("%d
    ",lowcost[n]);
    54     return 0;
    55 }
  • 相关阅读:
    解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
    qemu vm setup network(ssh) with buildroot
    C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size
    C 利用strtok, feof 截取字符串
    LINUX C: 获取本地指定网卡的IP地址
    C语言比较好的风格梳理
    perf-perf stat用户层代码分析
    内核调试-perf introduction
    内核调试-ftrace introduction
    【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)
  • 原文地址:https://www.cnblogs.com/general10/p/5762697.html
Copyright © 2020-2023  润新知