#include<iostream>usingnamespace std;constint N =100010;int son[N][26], cnt[N], idx;char str[N];voidinsert(char*str){int p =0;for(int i =0; str[i]; i++){int u = str[i]-'a';if(!son[p][u]) son[p][u]=++idx;
p = son[p][u];}
cnt[p]++;}intquery(char*str){int p =0;for(int i =0; str[i]; i ++){int u = str[i]-'a';if(!son[p][u])return0;
p = son[p][u];}return cnt[p];}
并查集
#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;constint N =100010;int n, m;int p[N];intfind(int x)//返回x的祖宗节点{if(p[x]!= x) p[x]=find(p[x]);return p[x];}intmain(){scanf("%d%d",&n,&m);for(int i =1; i <= n; i++) p[i]= i;//开局默认祖宗是自己while(m --){char op[2];int a, b;scanf("%s%d%d", op,&a,&b);if(*op =='M') p[find(a)]=find(b);//a所在集合的祖宗的祖宗是b集合的祖宗else{if(find(a)==find(b))puts("Yes");elseputs("No");}}return0;}