zoukankan      html  css  js  c++  java
  • P3377 【模板】左偏树(可并堆)


    咕了很久的左偏树,具体思想待咕咕


    #include<bits/stdc++.h>
    using namespace std;
    int n,m,f[100010],flg[100010],a,b,opt,lc[100010],rc[100010],d[100010];
    struct node{int val,id;}num[100010];
    int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
    int merge(int x,int y)
    {
        if(!x||!y)return x+y;
        if(num[x].val>num[y].val||(num[x].val==num[y].val&&num[x].id>num[y].id))
        swap(x,y);
        rc[x]=merge(rc[x],y);
        if(d[lc[x]]<d[lc[y]])swap(lc[x],lc[y]);
        d[x]=d[rc[x]]+1;
        return x;
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++){f[i]=i;cin>>num[i].val;num[i].id=i;}
        while(m--)
        {
            cin>>opt>>a;
            if(opt==1)
            {
                cin>>b;
                if(flg[a]||flg[b])continue;
                int x=find(a),y=find(b);
                if(x!=y)f[x]=f[y]=merge(x,y);
            }
            else{
                if(flg[a]){cout<<-1<<endl;continue;}
                int x=find(a);
                cout<<num[x].val<<endl;
                flg[x]=1;
                f[lc[x]]=f[rc[x]]=f[x]=merge(lc[x],rc[x]);
                lc[x]=rc[x]=d[x]=0;
            }
        }
    }
  • 相关阅读:
    MySQL修改root密码的多种方法
    AES和RSA算法的demo代码
    网卡
    Socket
    Opentracing 链路追踪
    TCP连接三次握手
    MongoDB 使用B树
    MySQL的DDL、DML、DCL
    MySQL 数据同步
    SSO(单点登录)与CAS
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11509031.html
Copyright © 2011-2022 走看看