您的位置:首页 > 其它

【有根树的同构】ZOJ 1990/POJ 1635

2012-02-23 15:55 405 查看
有根树的同构的意思就是两棵树的形状一样,子树可以旋转,因此,当子树的子节点数相同就可以判断同构

不用建树,只需要利用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
++;
return n;
}
int get2(){
int n = 1;
char c;
while((c=getchar()) == '0'){
n+=get2();
}
hash
--;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: