大臣的旅费

很久以前,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的路费。

根据资源限制尽可能考虑支持更大的数据规模。

资源约定:

峰值内存消耗 < 64M
CPU消耗 < 5000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

代码

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>using namespace std;int n;class Point {public:int num, cost;//点的编号,和到这个点的距离
};int ans;void f(vector<Point> m[], int vis[], int i, int j, int dis) {//查看是否直接邻居vector<Point> nei_i = m[i];//i的邻居的集合for (int k = 0; k < nei_i.size(); k++) {if (nei_i[k].num == j)//i的直接邻居中有j{ans = max(ans, dis + nei_i[k].cost);return;}}vis[i] = 0;
//    不是直接邻居,就从现有的直接邻居去连接for (int k = 0; k < nei_i.size(); k++) {int num = nei_i[k].num;if (vis[num] == -1)f(m, vis, num, j, dis + nei_i[k].cost);}vis[i] = -1;
}
int pnt=-1;
void dfs(vector<Point> m[], int vis[], int start,int dis) {vector<Point> nei_i = m[start];//i的邻居的集合vis[start]=0;bool isLeaf=true;for (int k = 0; k < nei_i.size(); k++) {int num = nei_i[k].num;//邻居点的标号if (vis[num] == -1){isLeaf= false;dfs(m, vis, num,dis + nei_i[k].cost);}}vis[start]=-1;if(isLeaf){if(dis>ans){ans=dis;pnt=start;}}
}
int dis2money(int dis) {return 11 * dis + dis * (dis - 1) / 2;
}int main(int argc, const char *argv[]) {scanf("%d", &n);vector<Point> m[n + 1];int vis[n + 1];memset(vis, -1, sizeof(vis));//初始化为-1for (int i = 0; i < n - 1; ++i) {int a, b, c;scanf("%d %d %d", &a, &b, &c);Point p1 = {b, c};Point p2 = {a, c};m[a].push_back(p1);m[b].push_back(p2);}
/*1.暴力,求任意两点间距离,并维护最长距离*//*for (int i = 1; i <= n - 1; ++i) {for (int j = i + 1; j <= n; ++j) {
//            int ans_t = ans;f(m, vis, i, j, 0);
//            if (ans > ans_t) {
//            cout << i << " " << j << " " << ans << endl;
//            }}}*/dfs(m,vis,1,0);ans=0;dfs(m,vis,pnt,0);
//    printf("%d\n", pnt);printf("%d\n", dis2money(ans));
//    printf("%d\n", ans);return 0;
}

征战蓝桥 —— 2013年第四届 —— C/C++A组第10题——大臣的旅费相关推荐

  1. 征战蓝桥 —— 2013年第四届 —— C/C++A组第9题——剪格子

    剪格子 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子中的整数, ...

  2. 征战蓝桥 —— 2013年第四届 —— C/C++A组第8题——买不到的数目

    买不到的数目 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 10 颗糖 ...

  3. 征战蓝桥 —— 2013年第四届 —— C/C++A组第6题——逆波兰表达式

    标题:逆波兰表达式 正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便. 例如:3 + 5 * (2 + 6) - 1 而且,常常需要用括号来改变运算次序. 相反,如果使用逆 ...

  4. 征战蓝桥 —— 2013年第四届 —— C/C++A组第7题——错误票据

    标题:错误票据 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误 ...

  5. 征战蓝桥 —— 2013年第四届 —— C/C++A组第5题——前缀判断

    题目标题:前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 ...

  6. 征战蓝桥 —— 2013年第四届 —— C/C++A组第4题——颠倒的价牌

    标题: 颠倒的价牌 小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店.其标价都是4位数字(即千元不等).小李为了标价清晰.方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了 ...

  7. 征战蓝桥 —— 2013年第四届 —— C/C++A组第3题——振兴中华

    标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子.地上画着一些格子,每个格子里写一个字,如下所示: 比赛时,先站在左上角的写着"从"字的格子里,可以横向或纵向 ...

  8. 连号区间数(2013年第四届c/c++ b组第10题)

    题目描述 标题:连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个 ...

  9. 征战蓝桥 —— 2017年第八届 —— C/C++A组第10题——油漆面积

    题目 X星球的一批考古机器人正在一片废墟上考古. 该区域的地面坚硬如石.平整如镜. 管理人员为方便,建立了标准的直角坐标系. 每个机器人都各有特长.身怀绝技.它们感兴趣的内容也不相同. 经过各种测量, ...

最新文章

  1. 数据结构—顺序表的插入算法
  2. jQuery实现自动左右滚动效果的代码实例
  3. 仅480块GPU搞出万亿参数大模型!达摩院3个月打造,出手即商用
  4. 端口扫描系统实践心得
  5. mysqlsql varchar类型只取前四个_Apache Doris0.12.0 发布,进入 Apache 孵化器后第四个正式版本...
  6. 小程序中ajax返回数据,请问在小程序中如何从请求success中将数据返回给对象data?...
  7. qdebug重定向_每个Qter都该知道的qDebug
  8. 32路视频光端机性能指标及视频特性介绍
  9. c#winform使用WebBrowser 大全[超长文转载]
  10. 我身边的手机应用开发者
  11. [VC]strcpy memcpy memset区别与简介
  12. 大数据是应对安全形势的进攻武器
  13. HDU 4348 To the moon
  14. URL Safe base64 与 base64相互转换
  15. ireport在springboot中中文不显示解决
  16. 小技巧 ----- 二维数组中通过(x, y)的偏移量来遍历(x, y)周围的元素
  17. 考研篇:如何在偶数年数学120+(刷同样的题,为什么有人的分数会更高?)
  18. 计算机写字板英语,写字板的英文是什么
  19. flink 一次job卡deploying故障解决
  20. 用JAVA时间类计算今天到指定日期的天数统计

热门文章

  1. Oracle笔记之表空间
  2. Java super和this
  3. 12 - Runtime实用的几个API
  4. linux 信号量锁 内核,Linux内核中锁机制之信号量、读写信号量
  5. linux修改jdk环境变量6,Linux CentOS 6.5 使用自带jdk修改环境变量(示例代码)
  6. web浏览器_vs2019使用webview2开发web浏览器 - 左正
  7. 16 导出pcb各网络的布线长度_PCB原理图常见错误分析
  8. Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数
  9. switch java 语法_Java编程—switch语句语法详解
  10. 迅雷2012校园招聘笔试题