• %%%城市交通费 city //程序超时


    //写在前面:很久没水博客了,犹记当年豪哥硬逼着我申请了博客,现在豪哥退役了,我依然在为国一而奋斗。

    //附:http://www.cnblogs.com/candy99/p/6875841.html 豪哥退役宣言

    //感谢赵老师配图

    2017 青岛比赛 第二题

    一道貌似眼熟的最短路

    用Floyd的思想,加一点改造

    通过枚举城市繁华度,将大于当前值的城市忽略,将剩余城市跑一遍最短路

    最后取最优值

    复杂度o(n^4)

    小数据可以,最起码先水掉了样例

    还可以进行一些简化

    发现p是多余的,先不改了

    应该用Dijkstra复杂度%%%%   只是Floyd比较好打……

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 int dis[255][255][255];
     6 int mi[255][255];
     7 int a,b,c;
     8 int n,m,q;
     9 int x;
    10 int pp[255];
    11 struct node{
    12     int p;
    13     int xu;
    14 }p[255];
    15 int com(const node a,const node b){
    16     return a.p >b.p ;
    17 }
    18 int main(){
    19     scanf("%d%d%d",&n,&m,&q);
    20     for(int i=1;i<=n;i++){
    21         scanf("%d",&pp[i]);
    22         p[i].p =pp[i];
    23         p[i].xu =i;
    24     }
    25     for(int i=1;i<=n;i++){
    26         for(int j=i;j<=n;j++){
    27             mi[i][j]=mi[j][i]=9999999;
    28             for(int k=1;k<=n;k++){    
    29                 dis[i][j][k]=dis[j][i][k]=9999999;}
    30         }
    31     }
    32     
    33     for(int i=1;i<=m;i++){
    34         scanf("%d%d%d",&a,&b,&c);
    35         for(int j=1;j<=n;j++){
    36             dis[a][b][j]=dis[b][a][j]=c;}
    37     }
    38     sort(p+1,p+n+1,com);
    39     for(int l=1;l<=n;l++){
    40         if(p[l].p ==p[l+1].p )continue;
    41         x=p[l].p ;
    42         for(int k=1;k<=n;k++){
    43             if(pp[k]>x)continue;
    44             
    45             for(int i=1;i<=n;i++){
    46                 if(pp[i]>x)continue;
    47                 for(int j=1;j<=n;j++){
    48                     if(pp[j]>x)continue;
    49                     if(dis[i][j][l]>dis[i][k][l]+dis[k][j][l]){
    50                         dis[i][j][l]=dis[i][k][l]+dis[k][j][l];
    51                     }
    52                 }
    53             }
    54         }
    55         for(int i=1;i<=n;i++){
    56             for(int j=1;j<=n;j++){
    57                 if(pp[i]<=x&&pp[j]<=x&&mi[i][j]>dis[i][j][l]+x){
    58                     mi[i][j]=dis[i][j][l]+x;
    59                 }
    60             }
    61         }
    62     }
    63 /*    for(int i=1;i<=n;i++){
    64         for(int j=1;j<=n;j++)
    65         cout<<mi[i][j]<<"  ";
    66         cout<<endl;
    67     }*/
    68     for(int i=1;i<=q;i++){
    69         scanf("%d%d",&a,&b);
    70         printf("%d
    ",mi[a][b]);
    71     }
    72 }
  • 相关阅读:
    CORS实践
    xunsearch使用记录
    apk的php解析
    MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT
    企业图谱
    《软件需求工程》阅读笔记03
    2020年下半年学习进度12
    《软件需求工程》阅读笔记02
    2020年下半年学习进度11
    《软件需求工程》阅读笔记01
  • 原文地址:https://www.cnblogs.com/nengshen/p/6910253.html
Copyright © 2020-2023  润新知