zoukankan      html  css  js  c++  java
  • [bzoj4668]冷战 -按秩合并并查集

    题意

    动态给点连边 询问两个点之间最早是在第几个操作连起来的
    // 存个板:按秩合并并查集


    一些补充(按秩合并):
    树高不会超过logn
    可以保留原始的信息


    代码

    #include <iostream>
    #include <cstdio>
    using namespace std;
    const int maxn=500003;
    int n,m,las,fa[maxn],edge[maxn],deep[maxn],siz[maxn],tim;
    int getfa(int x)
    {
    	if(x==fa[x]) return x;
    	int tf=getfa(fa[x]);
    	deep[x]=deep[fa[x]]+1;
    	return tf;
    }
    void merge(int x,int y)
    {
    	x=getfa(x); y=getfa(y);
    	if(x==y) return;
    	if(siz[x]>siz[y]) swap(x,y);
    	fa[x]=y; siz[y]+=siz[x];
    	edge[x]=tim;
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;++i) fa[i]=i,siz[i]=1;
    	for(int i=1,t0,t1,t2;i<=m;++i)
    	{
    		scanf("%d%d%d",&t0,&t1,&t2); t1^=las; t2^=las;
    		if(!t0) ++tim,merge(t1,t2);
    		else
    		{
    			las=0; int tx=getfa(t1),ty=getfa(t2);
    			if(tx!=ty) {puts("0"); continue;}
    			while(t1!=t2)
    			{
    				if(deep[t1]<deep[t2]) swap(t1,t2);
    				las=max(las,edge[t1]);
    				t1=fa[t1];
    			}
    			cout<<las<<'
    ';
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    MYsql增删改查
    粘包问题
    模拟ssh远程执行命令
    Socket抽象层
    基于TCP协议的socket套接字编程
    TCP协议的三次握手和四次挥手
    大话OSI七层协议
    网络架构及其演变过程
    互联网和互联网的组成
    Windows安装MySQL
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/14192072.html
Copyright © 2011-2022 走看看