跟去年NOIP某题基本一样. 最小生成树之后,就变成了询问连接两点的路径上的权值最大的边. 倍增LCA.链剖什么的随便搞. 块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权值”,然后暴力LCA时不要用LCA的值更新答案了. #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn…
正解:最小生成树/虚树 解题报告: 传送门! sd如我就只想到了最暴力的想法,一点儿优化都麻油想到,,,真的菜到爆炸了QAQ 然后就分别港下两个正解QAQ 法一,最小生成树 这个主要是要想到关于最小生成树的性质 关于最小生成树,有这么一个性质,就是说,对于任意一种最小生成树的方案,将边权排序得到的序列都是相等的 挺显然的不证了,结合kruscal的过程意会下QAQ 但其实我jio得并不重要,,,其实直接想着全程模拟kruscal的过程就好了QwQ 假如现在在模拟kruscal的过程,已经从小到大…
3720: Gty的妹子树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 412  Solved: 153[Submit][Status] Description 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕…… Gty神(xian)犇(chong)从来不缺妹子…… 他来到了一棵妹子树下,发现每个妹子有一个美丽度…… 由于Gty很哲♂学,他只对美丽度大于某个值的妹子感兴趣. 他想知道某个子树中美丽度大于…
带 加点 删边的块状树. 加点在 bzoj3720 说过. 删边其实就是块顶打标记,记录其属于哪棵树,防止在dfs搜集答案时跑到别的树上. 然后暴力把所在块拆开. 好像用邻接表存图,直接在vector里删边也行? #include<cstdio> #include<algorithm> #include<cmath> #include<vector> using namespace std; #define maxn 200001 ]; inline int…
块状树.教程见:http://z55250825.blog.163.com/blog/static/1502308092014163413858/将树按一定大小分块,分成许多子树,在每个子树的根节点记录一个数组,存储这个块中数据的有序表,查询时二分即可. 对于添加节点操作,若添加的节点的父节点所在块大小没有超过size,则添加到上面的块里,否则另起一块. 这个size值要注意,由于有二分操作,所以大小定为sqrt(n*log2(n))比较好,而不是sqrt(n),证明略. 时间复杂度O(n*sq…
很早之前用树链剖分写过,但是代码太长太难写,省选现场就写错了. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define lson rt<<1,l,m #define rson rt<<1|1,m+1,r #define maxn 60000 int n,m,u,v; int V[maxn],Next[maxn],First[maxn];…
块状树,每个块的根记录一下当前块内距块根为奇数距离的异或和和偶数距离的异或和,询问的时候讨论一下即可. 总的节点数可能超过50000. #include<cstdio> #include<cmath> using namespace std; #define N 100001 int n,m,L,a[N]; int en,v[N<<1],next[N<<1],first[N]; int e2,v2[N<<1],nex2[N<<1],f…
离线后以宗教为第一关键字,操作时间为第二关键字排序. <法一>块状树,线下ac,线上tle…… #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<queue> using namespace std; queue<int>q; int f,c; inline void R(int &x){ c=0;f=1;…
在线块状树LCA模板. #include<cstdio> #include<vector> #include<algorithm> #include<cmath> using namespace std; #define N 30001 vector<int>G[N]; typedef vector<int>::iterator ITER; int dep[N],x,y,fa[N],top[N],siz[N],sz,n,m,ans;…
3732: Network 题目:传送门 题解: 第一眼就看到最大边最小,直接一波最小生成树. 一开始还担心会错,问了一波肉大佬,任意两点在最小生成树上的路径最大边一定是最小的. 那么事情就变得简单起来了嘿嘿嘿,建棵树,直接在线LCA啊,用一个mx[i][j]记录i往上2^j这段区间的最大值. 代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include&l…