首页 > TAG信息列表 > wson

Codeforces 983E - NN country(贪心+倍增优化)

Codeforces 题面传送门 & 洛谷题面传送门 一道(绝对)偏简单的 D1E,但是我怕自己过若干年(大雾)忘了自己的解法了,所以过来水篇题解( 首先考虑怎么暴力地解决这个问题,不难发现我们每一步肯定会贪心,贪心地跳到所有经过当前点的公交线路中另一端最浅的位置,直到到达两点的 \(\text{LCA}\) 为

[CF208E] Blood Cousins - dsu on tree, LCA

[CF208E] Blood Cousins - dsu on tree, LCA Description 给你一片森林,每次询问一个点与多少个点拥有共同的 K 级祖先。 Solution dsu on tree 首先,求出一个点的 k 级祖先,并且把询问挂在他身上,问的就是这个点 p 子树内有多少个深度为 d 的点 在 dfs 过程中,对每个点,递归处理各个孩

[Codechef - ADITREE] Adi and the Tree - 树链剖分,线段树

[Codechef - ADITREE] Adi and the Tree Description 树上每个节点有一个灯泡,开始所有灯泡都是熄灭的。每次操作给定两个数 \(a,b\) ,将 \(a,b\) 这两个节点的灯的状态改变。定义某个状态的权值为,将树上所有亮点两两配对,每个对的权值的总和最小值。其中一个配对的权值定义为这两个

[一本通学习笔记] 最近公共祖先LCA

本节内容过于暴力没什么好说的。借着这个专题改掉写倍增的陋习,虽然写链剖代码长了点不过常数小还是很香。 10130. 「一本通 4.4 例 1」点的距离 #include <bits/stdc++.h> using namespace std; const int N = 1000005; namespace tree { int n; vector<int> g[N]; int top[N],

CF343D Water Tree

CF343D Water Tree 写珂朵莉树也就图一乐呵,要真冲还是要写线段树 题目给你一颗有根树,一个操作是将一个子树状态推平,另一个是将一个点到根的路径推平。 第一个操作直接区间覆盖\([dfn[u],dfn[u] + size[u] - 1]\)即可。 第二个操作按重链一直跳上去,遇到连续的就区间覆盖即可。 区间

BZOJ1977/LuoguP4180【模板】严格次小生成树[BJWC2010]

这道题本身思维难度不大,但综合性强,细节多 在其上浪一个早上,你的 最小生成树 树链剖分 线段树 DEBUG能力... 都大幅提升 细节与思路都在代码里面了。 欢迎hack. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define R(a,b,c) for(r

luogu2486 [SDOI2011]染色

link 题目大意:给定一个N个点的树,每个点有一个颜色 有M次操作,每次可以修改树某条链所有点变成一个颜色,查询某条链上点的颜色段数 树剖,线段树维护区间合并 我的代码记录的是某个区间左端点颜色、右端点颜色、除了左端点和右端点的颜色段数 需要稍微特殊处理一些情况,详见代码 #include

P2783 有机化学之神偶尔会做作弊 [点双][树剖]

P2783 有机化学之神偶尔会做作弊 史上最水黑题 做法很暴力:tarjan算法求点双缩点,建新图,跑树剖或倍增,求LCA,通过深度算出答案即可。 点双的做法跟强连通分量的tarjan算法极其相似,唯一的一点不同就在于不能回到父节点。 要是回父节点的话那都有两个点大小的环咯 自己交上去45pts,原来是