BZOJ1078 斜堆

Posted Billyshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1078 斜堆相关的知识,希望对你有一定的参考价值。

http://hzwer.com/5790.html  代码

http://www.cppblog.com/MatoNo1/archive/2013/03/03/192131.html  //原理讲解  

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,top,root;
int ls[105],rs[105],fa[105],ans[105];
void solve(){
    int x=root;
    while(rs[x]!=-1) x=ls[x];
    int t=ls[x];
    if(t!=-1&&ls[t]==-1&&rs[t]==-1) x=t;
    ans[++top]=x;
    if(x==root) root=ls[root];
    int f=fa[x];
    if(f!=-1) ls[f]=ls[x],fa[ls[f]]=f;
    while(f!=-1) swap(ls[f],rs[f]),f=fa[f];
}
int main(){
    fa[0]=-1;
    memset(ls,-1,sizeof(ls));
    memset(rs,-1,sizeof(rs));
    scanf("%d",&n);
    for(int i=1;i<=n;++i) {
        int x;scanf("%d",&x);
        if(x<100) ls[x]=i,fa[i]=x;
        else rs[x-100]=i,fa[i]=x-100;
    }
    for(int i=1;i<=n+1;++i)
        solve();
    while(top)  printf("%d ",ans[top--]);
}

以上是关于BZOJ1078 斜堆的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1078 斜堆

BZOJ1078 斜堆

[BZOJ]1078: [SCOI2008]斜堆

[bzoj1078][SCOI2008][斜堆] (贪心)

[BZOJ 1078][SCOI2008]斜堆(可并堆)

[BZOJ1455]罗马游戏-斜堆/左偏树-并查集(+数据生成器)