个人博客:Eloi-还在前进.
P2814 家谱(字符串并查集)
题目来源:洛谷P2814 家谱
题目描述:
给出充足的父子关系,请你编写程序找到某个人的最早的祖先。
解题思路:
本题其实就是一个普通并查集+map构建的哈希表。
map构建的哈希表具有下标任意,储存数据任意的特点。
故正好解决了字符串之间连边问题。
AC代码:
#include <bits/stdc++.h>
using namespace std;
map <string,string> father;
string find_root(string x)
{
if(father[x]!=x)
{
return find_root(father[x]);
}
return x;
}
int main()
{
char x;
string name;
string father_name;
string son_name;
while(1)
{
cin>>x;
if(x=='$') break;
cin>>name;
if(!father.count(name)) father[name]=name;
if(x=='#')
{
father_name=name;
}
if(x=='+')
{
son_name=name;
father[son_name]=father_name;
}
if(x=='?')
{
cout<<name<<" "<<find_root(name)<<endl;
}
}
return 0;
}