每日模板一練——並查集
阿新 • • 發佈:2018-12-16
極度細(毒)節(瘤)的字串處理,以及最後一步弄錯。。。。。(水了70分?)
【程式碼~】
#include<bits/stdc++.h> using namespace std; const int MAXN=5e4+10; map<string,int> name; map<int,string> id; map<string,bool> a; string s,s1; int fa[MAXN],k; int find(int x) { if(x==fa[x]) return x; return fa[x]=find(fa[x]); } int main() { for(int i=1;i<=MAXN;++i) fa[i]=i; int idx=0,last; bool flag=false; while(cin>>s) { if(s=="$") break; if(s[0]=='#') { int len=s.length(); s1=s.substr(1,len-1); if(!a[s1]) { idx++; name[s1]=idx; a[s1]=true; id[idx]=s1; last=idx; } else last=name[s1]; } if(s[0]=='+') { int len=s.length(); s1=s.substr(1,len-1); if(!a[s1]) { idx++; name[s1]=idx; a[s1]=true; id[idx]=s1; int f1=find(idx),f2=find(last); fa[f1]=f2; } else { int f1=find(name[s1]),f2=find(last); fa[f1]=f2; } } if(s[0]=='?') { int len=s.length(); s1=s.substr(1,len-1); cout<<s1; cout<<" "; cout<<id[find(name[s1])]<<endl; } } }