题解 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;
}
}
}