首页 > 其他分享 >虚树

虚树

时间:2023-07-13 21:48:22浏览次数:46  
标签:nl sta top lca now 虚树 关键点

我们用单调栈来建虚树,如果求 lca 的复杂度为 \(O(\log n)\) 的话,整个求虚树的复杂度应该为 \(O(n\log n)\)。

整体思路为我们用首先把所有关键点按照 dfs 序排序,然后首先把 \(1\) 节点加入栈。整个过程我们维护一条左链。我们考虑往里面加入一个新的关键点。求一下这个点和栈顶的 lca。

如果这个这个点和整个单调栈中的点都在一个链上,我们就入栈。

否则,我们不停的弹栈,同时链上栈中元素之间的边,接着,如果这个 lca 不在栈中的话,加入这个 lca 并连相应的边,最后加入我们的新关键点。

注意:

  • 如果 \(1\) 节点也是关键点注意不要重复入栈,判掉。
  • 最后栈中元素连边。

代码:

inline void bu(){
    top=0;
    sort(v.begin(),v.end(),cmp);sta[++top]=1;head2[1]=0;tail2=0;
    for(int now:v){
        vis[now]=1;
        if(now==1) continue;
        int nl=ge(now,sta[top]);
        if(nl!=sta[top]){
            while(top>=2&&id[nl]<id[sta[top-1]]) Add2(sta[top-1],sta[top]),top--;
            if(id[nl]>id[sta[top-1]]) head2[nl]=0,Add2(nl,sta[top]),sta[top]=nl;
            else Add2(nl,sta[top--]);
        }
        sta[++top]=now;head2[now]=0;
    }
    for(int i=1;i<top;i++) Add2(sta[i],sta[i+1]);
}

标签:nl,sta,top,lca,now,虚树,关键点
From: https://www.cnblogs.com/HeNuclearReactor/p/17552247.html

相关文章

  • 虚树 学习笔记
    虚树学习笔记引入我们在解决树上问题时,往往都是对整棵树进行处理,或者每次询问都对一个点、点对进行处理,这类题型一般都可以通过dp、树剖解决;然而,有一类问题要求我们每次对树上一些关键点进行处理。这类问题的特点就是询问次数多,而询问的点的总数不多。可如果我们每次都把整棵......
  • 虚树
    有一类问题,整棵树的节点数非常多,但是询问只和其中的若干个关键节点(以及必要的维护他们之间的连通性的节点)有关,这类问题我们可以采用虚树来优化。一般采用单调栈构建虚树,首先将所有关键节点按\(dfn\)排序,把\(1\)号节点入栈。单调栈中维护的一直是一条链,我们扫一遍所有的节点,......
  • 虚树学习笔记
    概念虚树是一棵树,相对于原树而言。它删去原树上某些点,再按原树父子关系连边构成的树。它对树上算法有一定优化。假如一个树上问题仅与部分节点有关,如树形DP,DP值仅在部分节点有改变,那么就可以已这部分节点建成虚树,省略其他部分,复杂度为部分节点总和。例:消耗战本题的删边DP只与......
  • 虚树 学习笔记
    虚树学习笔记如果有这么一个问题:在一棵超大的,有\(n\)个节点树上,并且树上有\(m\)个关键点,\(m\)远小于\(n\),如果问题只与关键点有关,我们不能很方便地在这棵超大的树......
  • 【树】虚树
    基本概念有一类题,给出了一棵树后需要进行多次以其中某些不同节点为重要节点的树形dp针对这类题我们会发现有大量冗余的点不需要进行任何转移,只需要进行向上或向下转移就......
  • [虚树记录] CF613D Kingdom and its Cities
    这只蒟蒻看完题完全不会做,但是这只蒟蒻是通过百度搜索虚树找到这题的,发现这道CF*2800的题居然是许多人介绍虚树的第一道例题!我大概可以退役力!不过看完题解觉得真的还挺可......
  • 【XSY1976】【BZOJ2286】【SDOI2011】消耗战(虚树,dp)
    这题的dp思想还是比较容易想的,关键是如何保证时间复杂度,这时就用到了虚树的技巧。1.虚树是什么?(虚树的性质)不妨设现在询问给出了\(k\)个点,我们命名这些节点为关键节点。......
  • 虚树
    虚树我们有这样一类问题,对于一个有\(n\)个点的树,有\(m\)组询问,每次询问给出\(k\)个关键点,关键点之间的最短距离。其中\(\sumk\len,n\le1e5\)。我们发现这一类......
  • 虚树
    在给定树上给出一些关键点,要求构造一棵树,满足所有关键点都在这棵树上,且树的形态与关键点在原树上的形态不变:即本不是祖先/后辈关系的点成为祖先/后辈是不允许的,本来是祖先/......
  • 虚树
    前置知识:树的dfs序及其性质参考:洛谷日报定义某棵树\(T\)上存在一个关键点点集\(S\)。如果存在某个点集\(T'\)满足\(S\subseteqT'\subseteqT\),且\(\forallu,......