藍橋杯 曆屆試題 大臣的旅費
曆屆試題 大臣的旅費時間限製: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的路費。
用Floyd算法去求任意兩點之間的最短距離,之後在最短距離之間找出兩個節點之間距離最大的,最後就可以求出最大路費值。
由於藍橋杯評測係統有問題,隻給了75分,看了其他人的方法和我一樣,把官方的正確方法放上去也隻有75分,看樣子就不是我的問題了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 150
#define INF 0x11111111
int i,j,n,x,y,z;
typedef int num[MAX][MAX];
num a;
void Shortway(num &a,int n)
{
int v,w,u;
for (u=0; u<n; ++u)
for (v=0; v<n; ++v)
for (w=0; w<n; ++w)
if (a[v][u]+a[u][w] < a[v][w]&&v!=w) {
a[v][w] = a[v][u]+a[u][w];
}
}
int main()
{
scanf("%d",&n);
memset(a,INF,sizeof(a));
for(i=1;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
x--;y--;
a[x][y]=z;
a[y][x]=z;
}
Shortway(a,n);
int max=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[i][j]>max&&a[i][j]<INF)
max=a[i][j];
}
int sum=0;
for(i=1;i<=max;i++)
sum+=(i+10);
printf("%d\n",sum);
system("pause");
return 0;
}
最後更新:2017-04-03 12:55:06