奇葩写法92分,求调
查看原帖
奇葩写法92分,求调
1073342
Genshin_ZFYX楼主2024/6/27 14:21
#include<bits/stdc++.h>
using namespace std;
vector<int>fa,j[200005];
int f[100005],r[100005];
int find(int x)
{
	if(x==fa[x])return x;
	return fa[x]=find(fa[x]);
}
void hb(int x,int y)
{
	x=find(x),y=find(y);
	if(x==y)return;
	if(r[x]>r[y])fa[y]=x;
	else
	{
		if(r[x]==r[y])r[y]++;
		fa[x]=y;
	}
}
struct node{
	int o,a,b,k;
}a[200005];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
	int n,m;
	cin>>n>>m;
	fa.push_back(0);
	for(int i=1;i<=n;i++)
	fa.push_back(i),r[i]=1;
	for(int i=1;i<=m;i++)
	{
		cin>>a[i].o;
		if(a[i].o==2)
        {
            cin>>a[i].k;
            f[a[i].k]++;
        }
		else cin>>a[i].a>>a[i].b;
	}
    if(f[0])j[0]=fa;
    for(int i=1;i<=m;i++)
	{
		int opt,d,b,k;
        opt=a[i].o;
		if(opt==1)
		{
			d=a[i].a;
            b=a[i].b;
			hb(d,b);
		}
		else if(opt==2)
		{
            k=a[i].k;
			fa=j[k];
            f[k]--;
            if(f[k]==0)j[k].clear();
		}
		else
		{
			d=a[i].a;
            b=a[i].b;
			if(find(d)==find(b))cout<<"1\n";
			else cout<<"0\n";
		}
		if(f[i])j[i]=fa;
	}
	return 0;
 } 
2024/6/27 14:21
加载中...