家谱
P2814
技术统计
难度
提高+/省选-
用时
50min左右
提交次数 1
unaccept 次数 0
ac次数 1
题意概括
求祖先
数据范围
父 子 关 系 ≤ 1000 , 总 人 数 ≤ 500000 , 树 的 层 数 ≤ 30 父子关系\le1000,总人数\le500000,树的层数\le30 父子关系≤1000,总人数≤500000,树的层数≤30
解法、
知识点
- 并查集
- string
- stl map
解法概括
和普通的并查集没有什么大的区别,就是把int改成string就好了
坑点
- swtich 不熟练千万不要用啊。。。
- 开的map是不需要类比a[maxn]这样的,新学map的童鞋们容易错
代码实现
#include<bits/stdc++.h>
using namespace std;
map<string,string>fa;
char ch;
string fat,s;
string find(string a)
{
if(fa[a]!=a)fa[a]=find(fa[a]);
return fa[a];
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
while(cin>>ch)
{
if(ch=='$')break;
cin>>s;
if(ch=='#')
{
fat=s;
if(fa[fat]=="")fa[fat]=fat;
}
else if(ch=='+') fa[s]=fat;
else cout<<s<<" "<<find(s)<<endl;
}
return 0;
}
类似题目
并查集模板【雾】