模板汇总——左偏树

摘要:
封装:classLeft_ Heap{public:staticconstintMn=N;intls[Mn],rs[Mn]、rt[Mn];val[Mn]pos[Mn]和dis[Mn];intn;voinitit(){for(inti=1;i<=N;++i){ls[i]=rs[i]=dis[i]=0;rt[i]=pos[i]=i;}dis[0]=-1;}布尔坎普(intt1,intt2

已封装:

模板汇总——左偏树第1张模板汇总——左偏树第2张
class Left_Heap{
public:
    static const int Mn = N;
    int ls[Mn], rs[Mn], rt[Mn], val[Mn], pos[Mn], dis[Mn];
    int n;
    void init(){
        for(int i = 1; i <= n; ++i){
            ls[i] = rs[i] = dis[i] = 0;
            rt[i] = pos[i] = i;
        }
        dis[0] = -1;
    }
    bool cmp(int t1, int t2){
        if(val[t1] == val[t2]) return pos[t1] < pos[t2];
        return val[t1] < val[t2];
    }
    int Find(int x){
        if(x == rt[x]) return x;
        return rt[x] = Find(rt[x]);
    }
    int Merge(int u, int v){
        if(u == v) return u;
        if(!u || !v) return u+v;
        if(!cmp(u, v)) swap(u, v);
        rs[u] = Merge(rs[u], v);
        rt[rs[u]] = u;
        if(dis[ls[u]] < dis[rs[u]]) swap(ls[u], rs[u]);
        dis[u] = dis[rs[u]] + 1;
        return u;
    }
    int Pop(int u){
        if(!u || pos[u] == -1) return -1;
        u = Find(u);
        rt[ls[u]] = ls[u];
        rt[rs[u]] = rs[u];
        rt[u] = Merge(ls[u], rs[u]);
        pos[u] = -1;
        return val[u];
    }
    void Unit(int u, int v){
        if(pos[u] == -1 || pos[v] == -1) return ;
        u = Find(u); v = Find(v);
        if(u == v) return ;
        Merge(u, v);
        return ;
    }
}tr;
View Code

免责声明:文章转载自《模板汇总——左偏树》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇创建以Microsoft .NET Remoting为基础的分布式应用架构matlab三维画图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

【Lua】table表删除指定元素 (转)

删除表时,会找到一个表。remove(table,idx)方法用于根据表中的索引进行删除。当前要求是根据值进行删除。quick-x中还有一个相应的表方法封装:1.根据表中的值删除--删除表中的指定元素(而不是根据索引)--@paramarray要操作的容器--@paramvalue删除值--@paramremo...

seata启动报错的可能原因,以及解决方案

seata启动错误的可能原因及解决方案。首先,我下载了seata 0.9版和jdk 12.0.2版。启动错误的截图是:它显示无法创建虚拟机。我尝试了很多方法,但都没有解决。...

Windows 远程桌面连接ubuntu及xrdp的一些小问题(远程桌面闪退、连接失败、tab补全功能,无菜单栏,error

想要修改,在windowsmanager中,keyboard里将用到Super+Tab的快捷键clear掉即可。解决:通过设置sesman.in文件内的参数解决:cat/etc/xrdp/sesman.inivi/etc/xrdp/sesman.ini可以修改会话设置:将最大会话限制该大MaxSessions=50;将KillDisconnected=1;则...

oracle报ORA-08103: 对象不再存在错误

今天,在导入数据时,数据库多次抛出异常。最常见的原因是同时操作。有人截断了表,然后将其放入选择表中。在群里发布错误,有人立刻出来认出他,说他正在整理表格……如果不是因为这个原因,百度也给出了其他尝试的计划:再次执行;查询时添加架构。...

【译】颜色空间 REC.709 vs sRGB的

但转换函数(gamma)不同。让我们先定义颜色空间。颜色模型和颜色空间非常混乱。RGB颜色模型表示所有颜色都可以通过RGB的线性组合获得,而颜色空间是指能够解析数值的颜色模型。颜色空间的定义包含以下信息。颜色空间可以基于RGB模型检测颜色,因此使用三原色来表示所有颜色似乎是合理的。三原色的颜色坐标与sRGB相同。...

Windows 无人值守安装应答文件详解

^返回顶部[Unattend]UnattendMode=FullUnattend。在此处将其设置为FullUnattend将导致完全自动的无人值守安装。安装过程中遇到的所有问题都将在winnt中引起。答案在sif文件中预先设置。安装期间不能更改任何默认值。TargetPath=“Windows此选项告诉安装程序在哪个目录中安装Windows。AutoActi...