求助,小改动之后代码AC,但不知道为什么(玄关)
  • 板块灌水区
  • 楼主YaeMiko_
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/7/14 10:53
  • 上次更新2023/11/3 09:57:30
查看原帖
求助,小改动之后代码AC,但不知道为什么(玄关)
256893
YaeMiko_楼主2023/7/14 10:53

rt

#include <bits/stdc++.h>
using namespace std;
int f[30010],m[30010],num[30010],n,x,y,a,b;
char z;
int find(int k)
{
	if(f[k]==k) return k;
	int xx=find(f[k]);
	m[k]+=m[f[k]];
	return f[k]=xx;
}
int main()
{
	cin>>n;
	for(int i=1;i<=30000;i++)
	{
		f[i]=i;
		m[i]=0;
		num[i]=1;
	}
	while(n--)
	{
		cin>>z>>x>>y;
		a=find(x);
		b=find(y);
		if(z=='C')
		{
			if(a==b) cout<<abs(m[x]-m[y])-1<<endl;
			else cout<<"-1"<<endl;
		}
		else
		{
			m[a]+=num[b];
			f[a]=b;
			num[b]+=num[a];
			num[a]=0;
			
		}
	}
	return 0;
}//AC代码
#include <bits/stdc++.h>
using namespace std;
int f[30010],m[30010],num[30010],n,x,y,a,b;
char z;
int find(int k)
{
	if(f[k]==k) return k;
	m[k]+=m[f[k]];
	return f[k]=find(f[k]);
}
int main()
{
	cin>>n;
	for(int i=1;i<=30000;i++)
	{
		f[i]=i;
		m[i]=0;
		num[i]=1;
	}
	while(n--)
	{
		cin>>z>>x>>y;
		a=find(x);
		b=find(y);
		if(z=='C')
		{
			if(a==b) cout<<abs(m[x]-m[y])-1<<endl;
			else cout<<"-1"<<endl;
		}
		else
		{
			m[a]+=num[b];
			f[a]=b;
			num[b]+=num[a];
			num[a]=0;
			
		}
	}
	return 0;
}//11pts代码

只在find函数有所改动

2023/7/14 10:53
加载中...