题解 P2814 【家谱】

不用STL,暴力出奇迹!

并查集模板题加字符串
为什么要map。。。


#include<bits/stdc++.h>
using namespace std;
struct node
{
	char name[11],pdd;
	int fa,len;
}P[100010];
char pd;
int FA,gs,root;
int find(int x)
{
	if(P[x].fa==x)
	{
		return x; 
	}
	return P[x].fa=find(P[x].fa);
}
int found(int x)
{
	for(int i=1;i<=gs;i++)
	{
		if(P[i].pdd!='?')
		{
			for(int j=1;j<=6;j++)
			{
				if(P[i].name[j]!=P[x].name[j])
				{
					break;
				}
				if(j==6)
				{
					return i;
				}
			}
		}
	}
}
int main()
{
    //freopen("gen.in","r",stdin);
    //freopen("gen.out","w",stdout);
    while(cin>>pd)
    {
    	cin>>P[++gs].name+1;
    	P[gs].pdd=pd;
    	P[gs].fa=gs;
    	P[gs].len=strlen(P[gs].name+1);
    	if(pd=='#')
    	{
    		FA=found(gs);
    	}
    	if(pd=='+')
    	{
    		int qaq=found(gs);
    		P[qaq].fa=find(FA);
    	}
    	if(pd=='?')
    	{
    		int qwq=found(gs);
    		root=find(qwq);
    		for(int i=1;i<=P[qwq].len;i++)
    		{
    			cout<<P[qwq].name[i];
    		}
    		cout<<" ";
    		for(int i=1;i<=P[root].len;i++)
    		{
    			cout<<P[root].name[i];
    		}
    		cout<<endl;
    	}
    }
}
posted @ 2019-03-09 16:39  G_A_TS  阅读(456)  评论(0编辑  收藏  举报