zoukankan      html  css  js  c++  java
  • BZOJ4668: 冷战

    并查集,按秩合并,树高log,暴力查询。

    #include<cstdio>
    const int N=5e5+5;
    int f[N],d[N],r[N],p[N];
    int bel(int i){
        if(p[i]==i)
            return i;
        int j=bel(p[i]);
    	d[i]=d[p[i]]+1;
    	return j;
    }
    int join(int i,int j){
    	i=bel(i);
    	j=bel(j);
    	if(i==j)return 0;
    	if(r[i]==r[j])++r[j];
    	if(r[i]<r[j]){
    		p[i]=j;
    		return i;
    	}
    	p[j]=i;
    	return j;
    }
    int ask(int i,int j){
    	int s=0;
        if(bel(i)==bel(j))
    		while(i!=j)
    			if(d[i]>d[j])
    				s<f[i]?s=f[i]:0,i=p[i];
    			else
    				s<f[j]?s=f[j]:0,j=p[j];
    	return s;
    }
    int n,m,k,s,t,l;
    int main(){
    	scanf("%d%d",&n,&m);
    	for(;n;--n)p[n]=n;
    	while(m--){
    		scanf("%d%d%d",&k,&s,&t);
    		s^=l,t^=l;
    		if(k)
    			printf("%d
    ",l=ask(s,t));
            else
                f[join(s,t)]=++n;
        }
    }
    
  • 相关阅读:
    css float
    java基础77
    java基础75
    java基础73
    java基础72
    java基础71
    java基础630
    django-模版学习
    Django--- 网页显示时间
    创建一个django项目
  • 原文地址:https://www.cnblogs.com/f321dd/p/5808806.html
Copyright © 2011-2022 走看看