如何找到一个人的最早祖先
查看原帖
如何找到一个人的最早祖先
703085
Myosotis_alpestris楼主2023/5/2 16:52

RT,已经进行路径压缩了,但是输出的还是它的父亲

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
int num,ans;
int fa[100100];
int find(int x)
{
	if(x==fa[x]) return x;
	return fa[x]=find(fa[x]);
}
void join(int a,int b)
{
	if(a<b) swap(a,b);
	int fx=find(a);
	int fy=find(b);
	if(fx!=fy) fa[fx]=fy;
}
map<string,int> m1;
map<int,string> m2;
int main()
{
	for (int i=1;i<=100100;i++)
	{
		fa[i]=i;
	}
	char c,cz;
	string a,az;
	int k=1;
	while(1)
	{
		cin>>c;
		if(c=='$')
		{
			return 0;
		}
		cin>>a;
		if(c=='#')
		{
			m1[a]=k++;
			m2[m1[a]]=a;
			az=a;
		}
		if(c=='+')
		{
			m1[a]=k++;
			m2[m1[a]]=a;
			join(m1[a],m1[az]);
		}
		if(c=='?')
		{
			cout<<a<<" ";
			cout<<m2[find(m1[a])]<<endl;
		}
		
	}
	return 0;
}

2023/5/2 16:52
加载中...