首页 > 其他分享 >备忘录

备忘录

时间:2024-01-19 22:26:05浏览次数:26  
标签:__ return int dfs 备忘录 dfn read

LCA(DFS序)
int get(int x, int y) {return dfn[x] < dfn[y] ? x : y;}
void dfs(int id, int f) {
  mi[0][dfn[id] = ++dn] = f;
  for(int it : e[id]) if(it != f) dfs(it, id); 
}
int lca(int u, int v) {
  if(u == v) return u;
  if((u = dfn[u]) > (v = dfn[v])) swap(u, v);
  int d = __lg(v - u++);
  return get(mi[d][u], mi[d][v - (1 << d) + 1]);
}
int main(){
  for(int i = 1; i <= __lg(n); i++)
  for(int j = 1; j + (1 << i) - 1 <= n; j++)
    mi[i][j] = get(mi[i - 1][j], mi[i - 1][j + (1 << i - 1)]);
}
LCA(st表)
void dfs(int x,int y){
    f[x][0]=y;d[x]=d[y]+1;
    fo(__lg(d[x]))f[x][i]=f[f[x][i-1]][i-1];
    for(int i:node[x]) if(i!=y) dfs(i,x);
}
inline void lca(int x,int y){
    if(d[x]<d[y])swap(x,y);
    while(d[x]>d[y])x=f[x][__lg(d[x]-d[y])];
    if(x==y){write(x),putchar('\n');return;}
    for(int k=__lg(d[x]);k>=0;--k)
        if(f[x][k]!=f[y][k])x=f[x][k],y=f[y][k];
    write(f[x][0]);putchar('\n');return;
}
int main(){
    int a,b;n=read(),m=read(),s=read();
    fo(n-1)a=read(),b=read(),node[a].push_back(b),node[b].push_back(a);
    dfs(s,0);
    fo(m)a=read(),b=read(),lca(a,b);
}
森林启发式合并

标签:__,return,int,dfs,备忘录,dfn,read
From: https://www.cnblogs.com/Ishar-zdl/p/17975742

相关文章

  • Android大作业,云备忘录项目+源代码+文档说明
    界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目......
  • [转发] Go pprof内存指标含义备忘录
    原文链接Gopprof内存指标含义备忘录最近组内一些Go服务碰到内存相关的问题,所以今天抽时间看了下Gopprof内存指标的含义,为后续查问题做准备。内容主要来自于Go代码中对这些字段的注释,加自己的理解。理解不对的地方欢迎指正。//https://github.com/golang/go/blob/master/src......
  • 备忘录模式(Memento)
    #include<iostream>#include<string>usingnamespacestd;classOriginalWord;classMemento{public:Memento(stringstrWord):m_strWord(strWord){}private:friendclassOriginalWord;stringGetWords(){returnm_strWord......
  • 设计模式(十八)备忘录
    一、定义在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。备忘录模式是一种对象行为型模式,其别名为标记(Token)模式。二、描述备忘录模式的核心在于备忘录类以及用于管理备忘录的负责人类的设计,包含以下三个......
  • 安卓手机语音备忘录在哪里?
    我们在日常生活和工作中,使用手机记事的时候,不仅需要在备忘录或便签软件中记录文字、图片,有时候我们也需要记录语音或音频文件。那么安卓手机语音备忘录在哪里呢?其实绝大多数的安卓手机中都是没有专门的语音备忘录的,我们可以直接在“录音”应用中录入语音并保存,也可以在系统备忘录......
  • 电脑备忘录小工具怎么添加?怎么在电脑桌面添加备忘录?
    作为一名天天用电脑办公的上班族,如果你需要对某个项目或问题进入深入思考,想要快速记录想法和思路,这时候会选择什么样的记事方式呢?如果你需要记录常用的工作文字内容、工作注意事项、项目流程、待办的工作安排等,用什么样的方式记录更便捷?越来越多的职场人士抛弃纸质的记事本,而选择......
  • 备忘录模式
    备忘录模式,也叫快照模式,它可以在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要的时候恢复到原先保存的状态。常见的场景比如游戏进度日志,VMWare操作系统快照等,以备后续的恢复。备忘录模式有三个角色,一是源发器,二是对源发器状态进行记录的备忘......
  • 备忘录模式
    [实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。1. 提交源代码2. packagexuni;importjava.util.ArrayList;importjava.util.List;publicclassCaretaker{privateList<Memen......
  • 怎么在电脑桌面上使用备忘录软件?
    在忙碌的办公室,上班族时常需要一款能帮助他们随时记录信息、待办事项和日程安排的备忘录软件。想象一下,你正在开会,突然想到了一个重要的待办事项,或者是接听了一个电话,得知了一个即将到期的任务。在这些情境下,一个悬浮在电脑桌面的备忘录软件就能发挥巨大的作用。那么,我们怎么在电......
  • 实验 20:备忘录模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解备忘录模式的动机,掌握该模式的结构;2、能够利用备忘录模式解决实际问题。 [实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现......