BZOJ 1509[NOI 2003]逃学的小孩 树形dp】的更多相关文章

1509: [NOI2003]逃学的小孩 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 995  Solved: 505[Submit][Status][Discuss] Description Input 第一行是两个整数N(3  N  200000)和M,分别表示居住点总数和街道总数.以下M行,每行给出一条街道的信息.第i+1行包含整数Ui.Vi.Ti(1Ui, Vi  N,1  Ti  1000000000),表示街道i连接居住点U…
树形dp求出某个点的最长3条链a,b,c(a>=b>=c), 然后以这个点为交点的最优解一定是a+2b+c.好像还有一种做法是求出树的直径然后乱搞... --------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<cctype>   usin…
[NOI2003 逃学的小孩] 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:"喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?"一听说要考试,Chris的父母就心急如焚,他们决定在尽量短的时间内找到Chris.他们告诉Chris的老师:"根据以往的经验,Chris现在必然躲在朋友Shermie或Yashiro家里偷玩<拳皇>游戏.现在,我们就从家出发去找Chris,一但找到,我们立刻给您打电话."说完砰的…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1509 [算法] 树的直径 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 200010 struct edge { int to,w,nxt; } e[MAXN << ]; int i,n,m,u,v,w,s,t,tot; int head[MAXN]; long long dista[MA…
题意:给一棵树 选三个点A,B,C 求A到B的再从B到C的距离最大值 需要满足AB的距离小于AC的距离 题解:首先树上的最大距离就想到了直径 但是被样例误导了TAT BC两点构成了直径 我一开始以为A在直径上答案最大 然后再加上最接近路径长度一半的路径 其实 A不在直径上的话显然更优啊... 那么做法就是先求出直径 然后记录路径 枚举路上的每一个点能到达的最远的路径 当然这个最远路径不能和直径有公共边 复杂度的话想想还挺有意思的 从直径上走刚好遍历整棵树 总结:突然发现这个题数据水了.. 我这个…
先找到题 题意: 中文题,没什么好解释的,也没什么歧义. 分析: 首先我们想一下他的路径将会是怎样的:A-B-C/A-C-B,其实就是求一下min(AB+BC,AC+BC),ABC任选.挺简单,首先证明一点:BC不是直径时不会更优,证明之后,我们就可以直接找到直径,然后遍历每个点,实在是有点简单了,也没啥细节. 还可以这么想:他的路径是这样的:A-O-B-O-C/A-O-C-O-B,及他是由三段组成的,枚举点O(可以理解成二次元换根,或者说就是两遍dfs)计算最长的三段,求max(ma1+ma2…
题目链接:BZOJ - 1907 题目分析 使用树形 DP,f[x][0] 表示以 x 为根的子树不能与 x 的父亲连接的最小路径数(即 x 是一个折线的拐点). f[x][1] 表示以 x 为根的子树可以与 x 的父亲连接的最小路径数. 转移的方式非常巧妙,Orz PoPoQQQ 的 blog . 代码 #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #…
4871: [Shoi2017]摧毁"树状图" 题意:一颗无向树,选两条边不重复的路径,删去选择的点和路径剩下一些cc,求最多cc数. update 5.1 : 刚刚发现bzoj上这个做法被hack了....以后再想一下别的做法吧 一开始以为这是三合一,写了x=2和x=1. 后来才明白...人家给出的本来就是最优...你自己再求也无所谓 x=0的树形DP没有想出来,感觉很不好处理. 题解是对边进行树形DP 对于有向边\(p:(u,v)\),\(f(p), g(p), d(p)\)分别表…
BZOJ 洛谷 后缀数组做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 只考虑求极长相同子串,即所有后缀之间的LCP. 而后缀的LCP在后缀树的LCA处.同差异这道题,在每个点处树形DP统计它作为LCA时的贡献即可(有多少对后缀以它为LCA). 而第二问,同样维护子树内的最大值次大值.最小值次小值作为答案即可. 非后缀节点的\(size=0\),最值的初值同样要设成\(INF\)...但是最后也要一样DP. 初始设成\(INF\)在最后转移的时候同样要判...(不能是两个\…
题目链接 要求的和.最大值.最小值好像都可以通过O(n)的树形DP做,总询问点数<=2n. 于是建虚树就可以了.具体DP见DP()函数,维护三个值sum[],mx[],mn[]. sum[]要开longlong!.. //108172kb 2564ms(又是Rank4...) #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc(…