閱讀957 返回首頁    go 阿裏雲 go 技術社區[雲棲]


藍橋杯 曆屆試題 大臣的旅費

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

  上一篇:go JSP過濾器Filter配置過濾類型匯總
  下一篇:go 設計模式之觀察者模式與事件委托