藍橋杯 曆屆試題 大臣的旅費
曆屆試題 大臣的旅費時間限製: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