#include <iostream> #include <map> using namespace std; const int N=1e6; map<string,int>mapp; map<int,string>value; int f[N],n,idex; int get(string t) { if(mapp[t]==0) { mapp[t]=++idex; value[idex]=t; } return mapp[t]; } int find(int x) { if(x!=f[x]) f[x]=find(f[x]); return f[x]; } int main() { for(int i=1;i<=1e6;++i) f[i]=i; string t,back=""; while(cin >> t) { if(t[0]=='$') break; char ar=t[0];string arr=t.substr(1); if(ar=='?') { // cout << arr << ' ' << find(get(arr)) << endl; //# cout << arr << ' ' << value[find(get(arr))] << endl; //# continue; } if(ar=='#') back=arr; else f[get(arr)]=find(get(back)); } }
时间: 2024-04-20 08:23:57 浏览: 70
#include <iostream>
这是一个简单的代码片段,它使用了`map`和`union-find`算法来处理字符串之间的关系。具体来说,它构建了一个映射表,将每个字符串与一个唯一的整数值关联起来。然后,它使用`union-find`算法来维护字符串之间的连接关系。当输入一个以`?`开头的查询时,它会返回与查询字符串相连的字符串。当输入一个以`#`开头的字符串时,它会将该字符串与上一个字符串相连。
请问你对这段代码有什么疑问吗?
阅读全文