---------树上问题------------
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
树网的核[有关树的直径]
输入样例#1: 5 2 1 2 5 2 3 2 2 4 4 2 5 3 输出样例#1: 5 输入样例#2: 8 6 1 3 2 2 3 2 3 4 6 4 5 3 4 6 4 4 7 2 7 8 3 输出样例#2: 5 n<=500000 分析 为了方便,st,ed表示直径两端的两个点 首先来看树的核是一个点的情况 证...原创 2018-10-16 22:55:56 · 226 阅读 · 0 评论 -
谈谈树的直径
问题1: 求一个点到树上另一个点距离的最大值,另一个点是树的直径的端点 证明: a,b为直径, 若x到树上的最大距离为x--y 因为y到x是最长 dis(u,y) > dis(a,u) 否则a到x是最长的 因此 直径显然变为(a,y)或(b,y) 问题2 求树上一个点使得这个点到其它所有的最大距离最小,则这个点在直径上 因为到x距离最大的点是A或B 所以x显然没有U...原创 2018-10-16 23:18:51 · 183 阅读 · 0 评论 -
noip提高组树上问题模板[lca,树剖]
/*树*/ //lca int lca(int x,int y){//dep[root]=1** if(dep[x]<dep[y])swap(x,y); for(int i=18;i>=0;i--) if(dep[fa[x][i]]>=dep[y]) x=fa[x][i]; if(x==y) return x; for(int i=18;i>=0;i--) ...原创 2018-10-25 21:54:09 · 249 阅读 · 0 评论 -
P3128 [USACO15DEC]最大流 [树上差分]
传送门 点权差分 , 点加 点加 , lca减 , fa[lca]减 #include<bits/stdc++.h> #define N 50050 using namespace std; int first[N],next[N*2],to[N*2],tot; int n,m,fa[N][20],dep[N],val[N],ans; void add(int x,int y){...原创 2018-12-17 22:08:20 · 135 阅读 · 0 评论