【蓝桥杯】1207. 大臣的旅费*(树形dp|树的直径)

穿越隧道

在这里插入图片描述

思路:
求图中两点距离最长的路径(即树的直径)

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#define x first
#define y second
using namespace std;
const int N = 1e5 + 10, M = N * 2;
int h[N],e[M],ne[M],w[M],idx;
typedef pair<int,int> pii;
typedef long long ll;
int dis[N];
bool st[N];
int n;
ll ans;
void add(int a, int b, int c){
	e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
} 
ll dfs(int u, int fa){
	ll dis = 0;
	ll d1 = 0, d2 = 0;
	for(int i = h[u]; i != -1; i = ne[i]){
		int j = e[i];
		if(j == fa) continue;
		ll d = dfs(j,u) + w[i];
		dis = max(dis,d);
		if(d >= d1){
			d2 = d1;
			d1 = d;
		}
		else if(d > d2){
			d2 = d;
		}
	}
	ans = max(ans,d1 + d2);
	return dis;
}
int main(){
	scanf("%d",&n);
	memset(h,-1,sizeof(h));
	for(int i = 0 ; i < n - 1; i++){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		add(a,b,c),add(b,a,c);
	}
	dfs(1,-1);
//	int ans = -1;
//	for(int i = 1; i <= n; i++){
//		ans = max(ans,heap_dijkstra(i));
//	} 
//	
//	cout << ans << endl;
	ll sum = 0;
	for(ll i = 1; i <= ans; i++){
		sum += (1ll)*(i + 10);
	}
	cout << sum << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想使用Python编写一个程序来计算大臣旅费,你需要明确旅费的计算规则和参数。例如,你需要知道旅行的目的地、交通方式、住宿费用等信息。 一种简单的示例是,假设大臣旅费计算规则是根据目的地的距离和交通方式来计算。你可以使用第三方库如`googlemaps`来获取两地之间的距离,并根据交通方式确定旅行费用。以下是一个使用Google Maps API计算两地之间距离的示例代码: ```python import googlemaps def calculate_travel_expense(origin, destination, mode): # 设置你的Google Maps API密钥 gmaps = googlemaps.Client(key='YOUR_API_KEY') # 获取两地之间的距离(返回结果以公里为单位) result = gmaps.distance_matrix(origin, destination, mode=mode, units='metric') # 提取距离值 distance = result['rows'][0]['elements'][0]['distance']['value'] / 1000 # 转换为公里 # 根据交通方式确定旅费 if mode == 'driving': expense = distance * 0.5 # 假设每公里花费0.5元 elif mode == 'transit': expense = distance * 0.3 # 假设每公里花费0.3元 else: expense = distance * 0.2 # 假设每公里花费0.2元 return expense # 示例:计算从北京到上海的旅费(以驾车方式) origin = "北京" destination = "上海" mode = "driving" expense = calculate_travel_expense(origin, destination, mode) print("旅费:", expense, "元") ``` 请注意,上述示例仅为演示目的,并没有真实的旅费数据。你可以根据实际情况和需求进行相应的修改和扩展。此外,你需要提供有效的Google Maps API密钥才能正常运行此代码。 希望这个示例能帮助到你开始编写计算大臣旅费Python程序。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值