配对堆WA6个点怎么办在线等挺急的

P1456 Monkey King

不会配对堆先%一下。
by Long·J·William @ 2017-06-08 20:56:37


不如左偏树。
by 易极feng @ 2017-07-19 18:27:45


你的看不懂额,来看看我的配对堆(滑稽) ```cpp #include<cstdio> #define N 100005 #include<algorithm> #define For(i,j,k) for(int i=j;i<=k;i++) #include<ext/pb_ds/priority_queue.hpp> using namespace std; using namespace __gnu_pbds; int read(){ int l=1,x=0; char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if (ch=='-') ch=getchar(),l=-1; while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); return x*l; } __gnu_pbds::priority_queue<int> h[N]; int fa[N]; int find(int x){ if (fa[x]==x) return x; fa[x]=find(fa[x]); return fa[x]; } int main(){ int n,m,k,k0,fx,fy,x,y; while(scanf("%d",&n)!=EOF){ For(i,1,n) h[i].push(read()),fa[i]=i; m=read(); For(i,1,m){ x=read(),y=read(); fx=find(x); fy=find(y); if (fx==fy) printf("-1\n"); else{ k=h[fx].top(); h[fx].pop(); k=k/2; h[fx].push(k); k=h[fy].top(); h[fy].pop(); k=k/2; h[fy].push(k); fa[fx]=fy; h[fy].join(h[fx]); printf("%d\n",h[fy].top()); } } For(i,1,n) h[i].clear(); } return 0; } ```
by wjy666 @ 2017-07-22 14:41:04


\_\_gnu\_pbds::priority\_queue<int> h[N]; 这一行默认配对堆,不用再定义
by wjy666 @ 2017-07-22 14:43:02


@[wjy666](/space/show?uid=20821) 月莫%%%吴主任
by Hany01 @ 2017-07-23 16:30:46


|