G.路径 【树形DP】 【牛客】【桂林电子科技大学第三届ACM程序设计竞赛】

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

请输出这个最大的边权和。

传送门

比赛以为 是要对个点都进行dfs,以为时间复杂度很大,看到树就怕了,没想到是一道树形DP

太菜了!!!

AC_code:

/*
Algorithm:树形DP 
Author: anthony1314
Creat Time:
Time Complexity:
*/

#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<cstring>
#include<cstdio>
#include<bits/stdc++.h>
#define ll long long
#define maxn 100005
#define mod 1e9 + 7
#define line printf("--------------");
using namespace std;
ll dp[maxn][2];// 1代表奇数个节点  0代表偶数个节点 
struct edge{
	int v;
	int w;
};
vector<edge> g[maxn];
ll ans = 0;//答案
void dfs(int u, int fa) {
	dp[u][0] = -1e18;
	int len = g[u].size();
	for(int i = 0; i < len; i++){
		int v = g[u][i].v, w = g[u][i].w;
		if(v == fa) continue;
		dfs(v, u);
		ans = max(ans, dp[u][0] + dp[v][1] + w);
		ans = max(ans, dp[u][1] + dp[v][0] + w);
		dp[u][0] = max(dp[u][0], dp[v][1] + w);
		dp[u][1] = max(dp[u][1], dp[v][0] + w);
	}
	
}
int main() {
	int n;
	cin>>n;
	int u, v, w;
	for(int i = 1; i < n; i++){
		scanf("%d %d %d", &u, &v, &w);
		g[u].push_back(edge{v, w});
		g[v].push_back(edge{u, w});
	}
	dfs(1, 0);
	printf("%lld\n", ans);
	return 0;
}

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:35
falamo:回答我!look my eyes
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务