博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
loj10159. 「一本通 5.2 练习 2」旅游规划
阅读量:5050 次
发布时间:2019-06-12

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

思路:

  树形dp,最后用dfs标记所有的路径上的点,要注意可能会有多个点在以它为根的子树中的最长路径等于整棵树的最长路径,要分别作为初始点遍历整棵树。

#include
#include
#include
#include
using namespace std;const int maxn = 200010;void qread(int &x) { x = 0; register int ch = getchar(); while(ch < '0' || ch > '9') ch = getchar(); while(ch >= '0' && ch <= '9') x = 10 * x + ch - 48, ch = getchar();}int n, rt = 0;int deep[maxn];int f[maxn];int head[maxn];int go[maxn << 1];int nxt[maxn << 1];int d1[maxn];int d2[maxn];vector
c1[maxn];vector
c2[maxn];vector
v;int sign[maxn];void dfs(int x){ for(register int i = head[x]; i; i = nxt[i]){ if(!deep[go[i]]){ f[go[i]] = x; deep[go[i]] = deep[x] + 1; dfs(go[i]); } }}inline void init(){ qread(n); for(int i=1; i
d1[x]){ d2[x] = d1[x]; d1[x] = d1[go[i]] + 1; c2[x].clear(); for(int j=0; j
d2[x]){ d2[x] = d1[go[i]] + 1; c2[x].clear(); c2[x].push_back(go[i]); } else if(d1[go[i]] + 1 == d2[x]){ c2[x].push_back(go[i]); } } }}void dfs2(int x){ if(!x) return ; sign[x] = 1; for(int i=0; i
1 ? d1[i] << 1 : d1[i] + d2[i]; p = max(p, np); } for(int i=0; i
1 ? d1[i] << 1 : d1[i] + d2[i]; if(np == p) v.push_back(i); } for(int i=0; i
=2){ for(int i=0; i

 

转载于:https://www.cnblogs.com/junk-yao-blog/p/9492765.html

你可能感兴趣的文章
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
为什么要使用href=”javascript:void(0);”
查看>>
二进制文件的查看和编辑
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
javascript学习---BOM
查看>>