zoukankan      html  css  js  c++  java
  • [ 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 }
  • 相关阅读:
    第二次结对编程作业
    团队项目-需求分析报告
    团队项目-选题报告
    Git安装
    VI编辑,backspace无法删除解决方法
    VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program
    Ubuntu安装mysql
    Linux配置Tomcat
    Linux配置JDK
    鸡汤
  • 原文地址:https://www.cnblogs.com/general10/p/5762697.html
Copyright © 2011-2022 走看看