zoukankan      html  css  js  c++  java
  • 蓝桥杯 历届试题 大臣的旅费

     历届试题 大臣的旅费  
    时间限制:1.0s   内存限制:256.0MB
          
    问题描述

    很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。

    为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。

    J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。

    聪明的J发现,如果不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他花费的路费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。

    J大臣想知道:他从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?

    输入格式

    输入的第一行包含一个整数n,表示包括首都在内的T王国的城市数

    城市从1开始依次编号,1号城市为首都。

    接下来n-1行,描述T国的高速路(T国的高速路一定是n-1条)

    每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di千米。

    输出格式

    输出一个整数,表示大臣J最多花费的路费是多少。

    样例输入1
    5
    1 2 2
    1 3 1
    2 4 5
    2 5 4
    样例输出1
    135
    输出格式

    大臣J从城市4到城市5要花费135的路费。

    解法一:

    树的直径问题:两个BFS(用反证法可证明)

     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <cstring>
     6 #include <vector>
     7 #include <queue>
     8 using namespace std;
     9 struct Edge{
    10     int to,next,val;
    11 };
    12 long long max_len;
    13 int max_num,n;
    14 void bfs(int s,long long *dis,Edge *e,int *h){
    15     //memset(dis,-1,sizeof(dis));
    16     int top,i;
    17     for(i=1;i<=n;i++){
    18         dis[i]=-1;
    19     }
    20     queue<int> q;
    21     q.push(s);
    22     //vis[s]=true;
    23     dis[s]=0;
    24 
    25     while(!q.empty()){
    26 
    27         //cout<<max_num<<endl;
    28 
    29         top=q.front();
    30         q.pop();
    31         //vis[top]=false;
    32         for(i=h[top];i+1;i=e[i].next){
    33             //cout<<i<<endl;
    34             if(dis[e[i].to]==-1){
    35                 //vis[e[i].to]=true;
    36                 dis[e[i].to]=dis[top]+e[i].val;
    37                 if(dis[e[i].to]>max_len){
    38                     max_len=dis[e[i].to];
    39                     max_num=e[i].to;
    40                 }
    41                 q.push(e[i].to);
    42             }
    43         }
    44     }
    45 }
    46 int main(){//树的直径问题
    47     //freopen("D://INPUT.txt","r",stdin);
    48     scanf("%d",&n);
    49     Edge *e=new Edge[n*2+1];
    50     int *h=new int[n+1];
    51     long long *dis=new long long[n+1];
    52     //bool *vis=new vis[n+1];
    53     int i,num=0;
    54     int nn=n-1,u,v,val;
    55     //memset(h,-1,sizeof(h));
    56     for(i=1;i<=n;i++){
    57         h[i]=-1;
    58     }
    59 
    60 
    61     for(i=0;i<nn;i++){//建邻接表
    62         scanf("%d %d %d",&u,&v,&val);
    63         e[num].to=v;
    64         e[num].val=val;
    65         e[num].next=h[u];
    66         h[u]=num++;
    67 
    68         e[num].to=u;
    69         e[num].val=val;
    70         e[num].next=h[v];
    71         h[v]=num++;
    72     }
    73     max_len=-1;
    74     max_num=1;
    75     bfs(1,dis,e,h);
    76 
    77     //cout<<max_num<<endl;
    78     //cout<<max_len<<endl;
    79 
    80     bfs(max_num,dis,e,h);
    81     cout<<max_len*(max_len+21)/2<<endl;
    82     delete []e;
    83     delete []h;
    84     delete []dis;
    85     return 0;
    86 }
  • 相关阅读:
    springboot + mybatis-pagehelper 参数查询不分页的bug。。。
    不错位的java .class 反编译工具推荐
    git 生成ssh keys
    Spring boot 通用配置文件模板
    Shiro系列(3)
    Shiro系列(2)
    Shiro系列(1)
    updating
    前端速查手册——Note
    Java进阶知识与技术
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4401150.html
Copyright © 2011-2022 走看看