首页 > 其他 > 详细

蓝桥杯 大臣的旅费

时间:2014-03-16 03:50:48      阅读:480      评论:0      收藏:0      [点我收藏+]

标题:大臣的旅费


    很久以前,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最多花费的路费是多少。

样例输入:
5
1 2 2
1 3 1
2 4 5
2 5 4

样例输出:
135

样例说明:
大臣J从城市4到城市5要花费135的路费。

首先需要建一个图,初始化图的时候,两个相同点的距离是0,不同点的距离是无穷。再根据输入边的距离来改变两点间的距离。

这道题主要是找到最长的两个点的最短距离,然后计算花费即可。

bubuko.com,布布扣
 1 #include<stdio.h>
 2 #define MAXN 100000
 3 #define N 50
 4 int dist[N][N];
 5 
 6 int main()
 7 {
 8     int num1,num2,maxn,i,j,k;
 9     int n,m,longjl = 0,p = 0,q = 0;
10     scanf("%d",&n);
11     for(i = 1;i <= n;i++)//初始化图
12     {
13         for(j = 1;j <= n;j++)
14         {
15             if(i != j)
16             {
17                 dist[i][j] = MAXN;
18             }
19             else
20             {
21                 dist[i][j] = 0;
22             }
23         }
24     }
25     for(i = 1;i < n;i++)//按输入的边改变图,有n-1条边的连通图相当于树
26     {
27         scanf("%d%d%d",&num1,&num2,&m);
28         dist[num1][num2] = m;
29         dist[num2][num1] = m;
30     }
31     for(i = 1;i <= n;i++)
32     {
33         for(j = 1;j <= n;j++)
34         {
35             for(k = 1;k <= n;k++)
36             {
37                 dist[i][j] = dist[i][j] < dist[i][k]+dist[k][j]?dist[i][j]:(dist[i][k]+dist[k][j]);//Floyd算法,找到任意两点之间的最短距离
38             }
39         }
40     }
41     for(i = 1;i <= n;i++)
42     {
43         for(j = 1;j <= n;j++)
44         {
45             if(dist[i][j] < MAXN&&dist[i][j] > longjl)
46             {
47                 longjl = dist[i][j];  //找距离的最大值
48                 p = i;
49                 q = j;
50             }
51         }
52     }
53     printf("大臣j从%d城市到%d城市最多花费",p,q);
54     int sum = 0;
55     for(i = 1;i <= longjl;i++)
56     {
57         sum = sum + i + 10;    //计算花费
58     }
59     printf("%d\n",sum);
60     return 0;
61 }
bubuko.com,布布扣

蓝桥杯 大臣的旅费,布布扣,bubuko.com

蓝桥杯 大臣的旅费

原文:http://www.cnblogs.com/flying123/p/3601771.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!