PREV-9_蓝桥杯_大臣的旅费
- 问题描述
- 很久以前,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
- 样例输出1
- 输出格式
- 大臣J从城市4到城市5要花费135的路费。
记:
第一次写的时候,是从每个结点遍历,从而找到最长路径
然而在测试较大数据时会超时,
在参考过http://blog.csdn.net/rodestillfaraway/article/details/50529769
醒悟到,可以先找到最远点,再从最远点开始遍历寻找最长路径,就可以避免搜索多余的短路径(剪枝)
ps:
关于邻接表的使用,可以参考之前写过的
http://www.cnblogs.com/mind000761/p/8467789.html
示例代码:
- #include <stdio.h>
- #include <stdlib.h>
- #define LEN 10000
- typedef struct node node_t;
- typedef struct node
- {
- int n; /*下一个结点*/
- int v; /*边权值*/
- node_t *next;
- }node;
- typedef node *node_p;
- int n = ; /*结点*/
- int max = ; /*最长路径*/
- int vis[LEN]; /*访问标记*/
- node_p e[LEN]; /*邻接表*/
- void add_edge(int x,int y,int v)
- {
- node *p;
- p = (node *)malloc(sizeof(node));
- p->n = y;
- p->v = v;
- p->next = e[x];
- e[x] = p;
- return ;
- }
- void init()
- {
- int i;
- int x,y,v;
- scanf("%d",&n);
- //e = (node_p *)malloc(sizeof(node_p)*(n+1));
- //vis = (int *)malloc(sizeof(int)*(n+1));
- for (i = ; i <= n ; i ++)
- {
- e[i] = NULL;
- }
- for (i = ; i < n ; i ++)
- {
- scanf("%d %d %d",&x,&y,&v);
- add_edge(x,y,v);/*无向图,需添加两条边(双向)*/
- add_edge(y,x,v);
- }
- return ;
- }
- void dfs(int x,int len)
- {
- node *p = e[x];
- while (p != NULL)
- {
- if (!vis[p->n])
- {
- vis[p->n] = ;
- dfs(p->n,len+p->v);
- vis[p->n] = ;
- }
- p = p->next;
- }
- if (len > max)
- {
- max = len;
- n = x;
- }
- return ;
- }
- int main(void)
- {
- int i;
- init();
- /*第一次找最远端的点*/
- vis[] = ;
- dfs(,);
- vis[] = ;
- /*第二次由于是从最远端开始找,可以确保为最长路径*/
- max = ;
- vis[n] = ;
- dfs(n,);
- n = *max;
- if (max == )
- {
- n ++;
- }
- else if (max%)
- {
- n += (max/ + )*max;/*奇数*/
- }
- else
- {
- n += (max/)*(max+);/*偶数*/
- }
- printf("%d",n);
- return ;
- }
PREV-9_蓝桥杯_大臣的旅费的更多相关文章
- 蓝桥杯之大臣的旅费(两次dfs)
Description 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个 ...
- ALGO-22_蓝桥杯_算法训练_数的划分(DP)
问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=,k=,下面三种分法被认为是相同的. ,,; ,,; ,,; 问有多少种不同的分法. 输入格式 n,k 输出格式 ...
- 蓝桥杯_算法训练_ALGO10_集合运算
这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...
- 蓝桥杯_算法训练_Torry的困惑(基本型)
这个题目就是求质数的乘积,在加一个模,思路比较简单,直接上代码: #include<iostream> using namespace std; bool isPrime(int a) { ...
- 蓝桥杯_算法训练_区间k大数查询
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个数 ...
- ALGO-43_蓝桥杯_算法训练_A+B Problem
问题描述 输入A,B. 输出A+B. 输入格式 输入包含两个整数A,B,用一个空格分隔. 输出格式 输出一个整数,表示A+B的值. 样例输入 样例输出 数据规模和约定 -,,,<=A,B< ...
- ALGO-39_蓝桥杯_算法训练_数组排序去重
问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...
- ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...
- ALGO-117_蓝桥杯_算法训练_友好数
问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...
随机推荐
- Python之路,第二十篇:Python入门与基础20
python3 面向对象4 supper 函数 supper(type, obj) 返回绑定超类的实例(要求obj必须为type类型的实例) supper() 返回绑定的超类的实例,等同于(cl ...
- ss linux终端配置
最近ss莫名宕机,懒得重新安装了,就安装了一个非gui版本,安装非gui版本还有一个优点就是在远程服务器的时候可以用proxychains进行终端代理,非常友好实用.下面简单的说一下如何进行终端ss ...
- go:基于时间轮定时器方案
/* * http://blog.csdn.net/yueguanghaidao/article/details/46290539 * 修改内容:为定时器增加类型和参数属性,修改回调函数类型 */ p ...
- 快排 - 快速排序算法 (Chinar出品 简单易懂)
Quicksort 快排的简单讲解 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- set_uid set_gid stick_bit 软硬链接
1.set_uid,里面的s权限 即运行一个命令时,普通用户临时拥有root权限 ( 增加和移除s权限 chmod u+s file_name chmod u-s file_name 大S 和 ...
- mysql操作基本命令
查看索引 : show index from table_name 创建索引:create index index_name on table_name(column_name) 创建唯一索引:cre ...
- this语句的用法第一、二点
1.this是js的一个关键字,指定一个对象然后去代替他. 函数内的this和函数外的this,函数内的this指向行为发生的主体.函数外的this都指向window没有意思. 例题: functio ...
- Django--路由控制 ——URL反向解析
Django--路由控制 本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Djan ...
- (18)模型层 -ORM之msql 多表操作(字段的属性)
数据库表的对应关系 1.一对一 #关联字段写在那张表都可以 PS:只要写OneToOneField就会自动加一个id 2.一对多 #关系确立,关联字段写在多的一方 3.多对多 #多对多的关系 ...
- (15)模型层-什么是ORM
ORM是什么 1.MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发 ...