poj 1635 Subway tree systems(树的最小表示)

Posted Soda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1635 Subway tree systems(树的最小表示)相关的知识,希望对你有一定的参考价值。

Subway tree systems

 POJ - 1635 

题目大意:给出两串含有‘1’和‘0’的字符串,0表示向下搜索,1表示回溯,这样深搜一颗树,深搜完之后问这两棵树是不是同一棵树

/*
    在poj上交需要加一个string头文件,不然会CE 
    树的最小表示
    这里用的最小表示法就是将树的所有子树分别用1个字符串表示,要按字典序排序将他们依依连接起来。连接后如果两个字符串是一模一样的,那么他们必然是同构的。这样原问题就变成了子问题,子树又是一颗新的树。 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
string s1,s2;
string mn(string str){//得到树的最小表示 
    int dep=0,st=0;
    vector<string>a;
    string stemp;
    for(int i=0;i<str.size();i++){
        dep+=str[i]==1?-1:1;
        if(!dep){
            stemp="0"+mn(str.substr(st+1,i-st))+"1";
            a.push_back(stemp);
            st=i+1;
        }
    }
    sort(a.begin(),a.end());
    stemp=string("");
    for(int i=0;i<a.size();i++)stemp+=a[i];
    return stemp;
}
int main(){
    freopen("Cola.txt","r",stdin);
    int T;scanf("%d",&T);
    while(T--){
        cin>>s1>>s2;
        string ss1=mn(s1);
        string ss2=mn(s2);
        if(ss1==ss2)puts("same");
        else puts("different");
    }
}

 

以上是关于poj 1635 Subway tree systems(树的最小表示)的主要内容,如果未能解决你的问题,请参考以下文章

poj 1635 Subway tree systems(树的最小表示)

poj-1635 Subway tree systems(推断两个有根树是否同构)-哈希法

POJ1635 Subway tree systems ——(判断树的同构,树的最小表示法)

POJ 1635 树的最小表示法/HASH

POJ2502:Subway(最短路)

Subway POJ - 2502