<img src="https://img-blog.youkuaiyun.com/20151005111519668?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />/*
Problem Description:
很久以前,某王国拥有 n 个大城市,为了方便交通,国王下令修建了大量的用于连接首都和其他各大城市高速路。
为节省经费,王国采用了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。并且,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。
G商队是王国重要的运输商队,他们奔波于各大城市之间,为王国的人们运输商品,实现长途贸易。所以,从一个城市马不停蹄地到另一个城市成了G商队最常做的事情。他们有一个钱袋,用于存放往来城市间的运输费。
在运输过程中G商队发现,如果不在某个城市停下来休整,在连续行进过程中,他们所花的运输费与他们已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他们花费的运输费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。
G商队想知道:他们从某一个城市出发,如果中间不休息,到达另一个城市,所有可能花费的运输费中最多是多少呢?
输入:
输入的第一行包含一个整数n,表示包括首都在内的王国的城市数
城市从1开始依次编号,1号城市为首都
接下来n-1行,描述王国的高速路(王国的高速路一定是n-1条)
每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di千米。输入城市数(〈10),长度(〈=100)
输出:
输出一个整数,表示G商队最多花费的运输费是多少
样例输入:
5
1 2 2
1 3 1
2 4 5
2 5 4
样例输出:
135
题解:
Floyd 最短路径算法
Author:段廷银
Date:2016.10.5
Email:clickyeah@yeah.net
*/
#include <stdio.h>
#define N 16
int map[N][N];
int cost;
int max;
int cal(int n)
{
if(n==0) return 0;
else return cal(n-1)+10+n;
}
int main(int argc, char* argv[])
{
int n;
while(scanf("%d",&n)!=EOF) {
int i,j;
int a,b,c;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
map[i][j]=2048;
if(i==j) map[i][j]=0;
}
for(i=1;i<=n-1;i++) {
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
}
int k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(map[i][j]>map[i][k]+map[k][j]) {
map[i][j]=map[i][k]+map[k][j];
}
}
max=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if((cost=cal(map[i][j]))>max) max=cost;
}
printf("%d\n",max);
}
return 0;
}
/*
input:
5
1 2 2
1 3 1
2 4 5
2 5 4
output:
135
*/