标签:
并查集,按秩合并,树高log,暴力查询。
果然bzoj新挂的题中过的人多的全是sb题。
写了一发秒WA,发现姿势不对。(@_@)
然后过了50min,开始怀疑人生。(*_*)
这么长时间我lct都写完了。(Q_Q)
本着凡事要往好处想的精神,至少我改正了姿势。(T_T)
#include<cstdio>
#define N 500005
int n,m,q,k,s,t,l;
int f[N],d[N],r[N],p[N];
int find(int i){
if(p[i]==i)
return i;
int j=find(p[i]);
return d[i]
=d[p[i]]+1,j;
}
int join(int i,int j){
if((i=find(i))
==(j=find(j)))
return 0;
if(r[i]>r[j])
i^=j,j^=i,i^=j;
if(r[i]==r[j])
++r[j];
return p[i]=j,i;
}
int query(int i,int j){
int k=0;
if(find(i)==find(j))
while(i^j){
if(d[i]<d[j])
i^=j,j^=i,i^=j;
k<f[i]?
k=f[i]:0,i=p[i];
}
return k;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
p[i]=i;
for(;m;--m){
scanf("%d%d%d",&k,&s,&t);
s^=l,t^=l;
if(k)
printf("%d\n",
l=query(s,t));
else
f[join(s,t)]=++q;
}
}
标签:
原文地址:http://www.cnblogs.com/f321dd/p/5808806.html