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 }
  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/general10/p/5762697.html
Copyright © 2011-2022 走看看