#include<bits/stdc++.h> using namespace std; char op; string name,fa; map<string,string> m; string find(string x){ if(x!=m[x]) m[x]=find(m[x]); return m[x]; } int main(){ cin>>op; while(op!='$'){ cin>>name; if(op=='#'){ fa=name;//因为后面可能跟着n多个儿子,所以缓存先(感谢老师灵感^v^) if(m[name]=="") m[name]=name;//并查集嘛,没出现过的就当做自己是祖先 } if(op=='+') m[name]=fa;//是儿子就记录父亲 if(op=='?') cout<<name<<" "<<find(name)<<endl;//要查就查了 cin>>op; } return 0; } /************************************************************** Problem: 2236 User: yanye Language: C++ Result: Accepted Time:92 ms Memory:5048 kb ****************************************************************/