题意:给定n个字符串,如果两个字符串含有相同的字符就等效。问n个字符串中的不等效串的个数。
对26个小写字符并查集,在同一个字符串中出现就算一类。最后统计类的个数。
int f[30],vis[30];
int fin(int x){
if(f[x]==0)
return x;
return f[x]=fin(f[x]);
}
void mix(int fa,int son){
int x=fin(fa),y=fin(son);
if(x!=y)
f[y]=x;
}
int main(){
int n;
cin>>n;
int ans=0;
while(n--){
string s;
cin>>s;
int len=s.length();
int tag=fin(s[0]-'a'+1);
for(int i=0;i<len;i++){
int tt=s[i]-'a'+1;
vis[tt]=1;
int fa=fin(tt);
if(tag!=fa){
mix(tag,fa);
}
}
}
for(int i=1;i<27;i++){
if(f[i]==0&&vis[i])
ans++;
}
cout<<ans<<endl;
return 0;
}