本文主要介绍袁方圆百度百科(袁方圆百科),下面一起看看袁方圆百度百科(袁方圆百科)相关资讯。
\(\text{0x00。}\)前言突然发现整个机房只有我一个人可以 我不知道方树,最近方树在模拟游戏中出现的次数多得惊人,所以我来学习一下。it 这不是因为我能。;草,不要解决问题。
\(\text{0x01。}\)广义平方树在平方树中定义,每个原点对应一个点,每个点对对应一个正方形点;对于每一个点双连通分量,其对应的正方形点连接到这个点双连通分量中的每一个点;正方形树的每条边连接一个点和一个正方形点。而如果一个点连接多个正方形的点,那么这个点在原图上的点就是这些点对之间的切点。需要注意的是,正方形树的点数小于\(2n\),受点数的限制。
\(\text{oi-wiki}\)不应挂断(
构造内联void添加ge (int u,int v) {e [u]。就位_后退(v),e [v]。launte _ back(u);}void tarjan(int u,int fa){ dfn[stk[tp]= u]= low[u]= idx;for(const auto v:e[u])if(v^fa){ if(!dfn[v]) {tarjan(v,u),low[u]=min(low[u],low[v]);if(low[v]=dfn[u]) {addedge( cnt,u);while(stk[tp]^v) addedge(cnt,stk[tp-]);addedge(cnt,stk[tp-]);}} else low[u] = min(low[u],dfn[v]);} }//留着孤儿没意义。快来做题!例1。\(\text{[apio 2018]马拉松}\)
题目描述:给一个无向图,求\((s,c,f)\)三元组的个数,分别代表从\(s\)出发,经过\(c\)到\(f\)(经过点不能重复)。
考虑当(s,f)固定时,有多少——满足条件。实际上就是建立了平方树之后\(s,f\)所属的点对中的点。这从感性的角度来看其实是很有道理的。考虑一个点double \(b\)和它外面的一个点\(a\),那么就可以从\(b\)中的任意一点出发,到\(a\)。法没有经过他去过的地方就回来了。
但是我们如何计算贡献呢?将正方形点指定为它所代表的点对的大小,将点指定为\(-1\)。如何理解\(-1\)?或者看一张图:
假设\(s=4,f=5\),我们可以发现\(1,2\)是由相邻的平方点计算两次,所以需要减去。因为路径的两端一定是点,而且点是交错的,这个东西是对的。
现在问题其实变成了每个点会被路径计算多少次,树\(\mathtt{dp}\)就够了。
例2。\ (\ text {cf487e tours} \)
题目描述:给定一个简单的无向连通图,需要两个操作:
修改点的点权重;求两点间所有简单路径上点权的最小值。利用上面的结论,可以直接维护一个方形点\(\text{multiset}\)来维护对应的点对,然后用树截面来维护。
问题是当多个点对中包含的切点被修改时(比如菊花图),复杂度会直接上升。这里有一个经典的\(\rm诡计\):方点不维持父点的权重,所以点只会修改自己的父点。显然,只有当\(\rm lca\)是方点时,查询才会出错,所以可以补充父 s点正好在顶点。
例3。\(\text{[sdoi 2018] }\)策略游戏
题目描述:给出一个简单的无向连通图。有\(q\)个查询,每次给定一个点集\(s\),有多少个点\(u\)满足\(u\notin s\)和删除\(u\)后\(s\)中的点不都在一个连通分支中。
很容易发现 \(s\)中的点不都在连通分量中等价于s中存在\(u,v\),使得\(u,v \)之间的所有简单路径不连通。所以相对于\(u,v\),各自点对之间的点就是合法的切割点,然后构建一棵圆树。
那么实际上就是计算树上\(s\)的中点形成的最小连通块中的点数。首先给出计算方法:预处理从根到每个点的点数\(\rm val\),按\(\rm dfs\)排序\(s\)。答案是
\ [-| s | [\ text {lca} (s _ 1,s _ { | s | })\ le n]\ frac { 1 } { 2 } \ cdot \ sum _ { i = 1 } { | s | } \ text { val } _{|s| 1}=s_1\)。
给出一个理解方法:在计算\(\rm val\)时,我们把权重挂在\(u\)和父亲这一边,实际上是在模拟\(\rm dfs\)的过程。每一次相邻点的匹配,实际上都是走出一个子树,然后走进一个子树,最后从最后一个点走回第一个点,然后以\(\text{lca}(s_1,s_{|s|})\)为根做一个\(\rm dfs\)!可以发现每个点会计算两次。同时也可以发现,我们还没有计算出\(\text{lca}(s_1,s_{|s|})\)的贡献,所以要特别判断一下。
例4。\(\text{chef and sad pairs}\)
用颜色来考虑这个问题:如果你建一棵正方形树,由于点\(x\)而悲伤的对数相当于在\(x\)(你不妨把你的父亲想象成\(x\))的不同子树中选择一对点。但是这个\(\rm dfs\)的复杂度是平分的,所以需要建立一个虚拟树来求解。
但是,仍然有一个问题:对于 祖先-后代amp关系(假设\(u,v\)是同一个颜色,两者之间没有其他颜色的点),这个颜色的统计没有答案!所以你需要在链条上有所作为。好水。
让 ■放一个代码:\(\text{submission。}\)
此外,还可以进行启发式合并:\(\text{solution。}\)
\(\text{0x02。}\)窄圈树的定义不是很清楚为什么要分类。
现在无向图保证是仙人掌森林。仙人掌:每条边至多属于一个环的无向连通图;可以发现此时每个点对对应一个简单的环,这样仙人掌问题就可以转化为基环树上的问题解,就像这样:构造void tarjan (int u,int fa) {dfn [u] = low [u] = idx,stk[tp]= u;for(const auto v:g[u])if(v^fa){ if(!dfn[v]) {tarjan(v,u),low[u]=min(low[u],low[v]);if(low[v]==dfn[u]) /*方边*/;else if(low[v]dfn[u])/* round edge */;} else low[u] = min(low[u],dfn[v]);}}快来做题!例1。\(\text{[bzoj 4316] }\) small $\ \rm c\ $独立集
首先,如果这是一个树形结构,可以用\(dp(i,0/1)\)来求解。现在问题转移到仙人掌上了。先建立一个正方形树,点与点之间的父子关系还是一样的\(\mathtt{dp}\),否则我们就处理正方形点的值\(\mathtt{dp}\):由于原来的点对是一个环,所以\(0/1\)的状态实际上是两个边界点都没有选择。
例2。\(\text{[shoi 2008] }\)仙人掌地图\(\text{ ii}\)
这个问题是一个巨大的坑:如果你不 t再建一棵树,那么圆边就容易被忽略了!记得在圆的边缘从\(\rm tp\)减去一!
例3。\(\text{[haoi 2016] }\)地图
首先对问题的含义进行转换,发现所要求的其实是点\(x\)在正方形树的子树中,其油腻度\(\le y\)为奇数/偶数的拉面品种。
对于子树问题,一个角度是\ (\ text {dsuotree/} \)线段树合并,即直接搞子树;另一个角度是用\(\rm dfs\) sequence把它变成一个序列问题,这样就可以用扫描线(这个问题不可以)\(\text{/ }\)之类的算法来阻挡。
让 让我们在这里详细讨论一下阻塞法。奇数/偶数品尝时间是很好的统计数据,关键是如何限制 油腻度 。可以想到用树形数组,但是修改复杂度就变成了\(\mathcal o(n\sqrt n\log n)\)的事情。其实可以用range blocking(这是第一次看到qwq),把\(s(b,0/1)\)定义为权值属于出现次数为偶数/奇数的第\(b\)块的簇的个数,通过一次修改即可实现\(\mathcal o(1)\)。
我还没有 我还没有写代码。我 我有时间的时候会写的。
标签:
子树点
了解更多袁方圆百度百科(袁方圆百科)相关内容请关注本站点。