博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桂林电子科技大学第三届ACM程序设计竞赛 G 路径
阅读量:5266 次
发布时间:2019-06-14

本文共 961 字,大约阅读时间需要 3 分钟。

链接:

来源:牛客网

小猫在研究树。
小猫在研究路径。
给定一棵N个点的树,每条边有边权,请你求出最长的一条路径,满足经过每个点最多一次,经过的边的条数为偶数,且边权和最大。
请输出这个最大的边权和。

输入描述:

第一行一个正整数N,表示节点个数。 接下来N−1行,第i行三个正整数 ui,vi,wi,表示第i条边连接点ui,vi,边权为wi。

输出描述:

一行一个正整数,表示最大的边权和。

输入

51 2 51 3 52 4 52 5 1

输出

10

备注:

1≤N≤10

5

,1≤w

i

≤10

9

,保证输入数据形成一棵树。 题意:一棵树上每条边有一个边权,然后叫你找出一个偶数条边的路径,要求权值最大 思路:首先这个很容易看出是树形dp,不用偶数条的时候我们就可以保留到每个点的最大值然后找出每个点的最大和次大之和即可 偶数我们怎么处理呢,我们这时候就要考虑到当前这个点奇数条和偶数条的情况,所以我们dp数组分开记录奇偶数情况
#include
#define mod 5000000007#define maxn 100005using namespace std;typedef long long ll;struct sss{ ll x,z; sss(){}; sss(int a,int b){x=a;z=b;}; };vector
mp[maxn];int n;long long mx;ll dp[maxn][2];void dfs(int x,int fa){ dp[x][0]=0; dp[x][1]=-mod; for(int i=0;i
>n; for(int i=0;i
>x>>y>>z; mp[x].push_back(sss(y,z)); mp[y].push_back(sss(x,z)); } dfs(1,0); cout<

 

 

转载于:https://www.cnblogs.com/Lis-/p/10706398.html

你可能感兴趣的文章
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>