有根树的同构的意思就是两棵树的形状一样,子树可以旋转,因此,当子树的子节点数相同就可以判断同构
不用建树,只需要利用dfs时遇到'1'的时候回溯就行,开一个数组hash[i] = j表示子结点数为i(包括自己)的结点为j个
0ms无压力
int hash[801];//hash[i] = j表示子结点数为i(包括自己)的结点为j个
int get1(){
int n = 1;
char c;
while((c=getchar())=='0'){
n+=get1();//当前结点一直走下去直到遇到'1'要回头,利用了递归回溯
}
hash[n]++;
return n;
}
int get2(){
int n = 1;
char c;
while((c=getchar()) == '0'){
n+=get2();
}
hash[n]--;
return n;
}
int main(){
int n;
scanf("%d\n",&n);
while(n--){
memset(hash,0,sizeof(hash));
get1();
get2();
bool ok = 1;
int i;
for(i=1;i<801 && ok;i++){
if(hash[i]!=0)ok=0;
}
if(ok)puts("same");
else puts("different");
}
return 0;
}