1. 程式人生 > >【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方塊遊戲 帶權並查集

【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方塊遊戲 帶權並查集

inline 記錄 cst cnblogs bsp tac bzoj 開始 scan

這道題一開始以為是平衡樹結果發現復雜度過不去,然後發現我們一直合並而且只是記錄到最低的距離,那麽就是帶權並查集了,帶權並查集的權一般是到根的距離,因為不算根要好打,不過還有一些其他的,具體的具體打。

#include <cstdio>
#include <cstring>
const int N=30050;
int h[N],f[N],size[N];
char s[2];
inline int find(int x){
    if(f[x]==x)return x;
    int temp=f[x];f[x]=find(f[x]);
    if
(temp!=f[x])h[x]+=h[temp]; return f[x]; } inline void Unit(int x,int y){ h[find(x)]=size[find(y)]; size[find(y)]+=size[find(x)]; f[find(x)]=find(y); } int main(){ int T,x,y;scanf("%d",&T); for(int i=0;i<N;i++)f[i]=i,size[i]=1,h[i]=0; while(T--){ scanf(
"%s",s); if(s[0]==M)scanf("%d%d",&x,&y),Unit(x,y); else scanf("%d",&x),find(x),printf("%d\n",h[x]); } }

【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方塊遊戲 帶權並查集