1. 程式人生 > >洛谷P2814 家譜解題報告

洛谷P2814 家譜解題報告

家譜

P2814

技術統計

難度

提高+/省選-

用時

50min左右

提交次數 1

unaccept 次數 0

ac次數 1

題意概括

求祖先

資料範圍

<=1000,<=500000,<=30父子關係<=1000,總人數<=500000,樹的層數<=30

解法、

知識點

  1. 並查集
  2. string
  3. stl map

解法概括

和普通的並查集沒有什麼大的區別,就是把int改成string就好了

坑點

  1. swtich 不熟練千萬不要用啊。。。
  2. 開的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; }

類似題目

並查集模板【霧】