题目大意:

用一堆01字符串表示在树上走动的路径,0表示往前走,1表示往回走,问两种路径方式下形成的树是不是相同的树

我们可以利用递归的方法用hash字符串表示每一棵子树,然后将所有子树按照字典序排序,来判断这个hash字符串是否相同

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <string>
 5 #include <algorithm>
 6 #include <vector>
 7 using namespace std;
 8 #define N 3010
 9 char s1[N] , s2[N];
10
11 string dfs(int l , int r , char *s)
12 {
13    // cout<<l<<" "<<r<<endl;
14     vector<string> v;
15     int num = 0;
16     string ret = "";
17     for(int i=l ; i<=r ; i++){
18         if(s[i] == '0') num++;
19         else num--;
20         if(num==0){
21             string tmp = "0"+dfs(l+1 , i-1 , s)+"1";
22             v.push_back(tmp);
23             l = i+1;
24         }
25     }
26     sort(v.begin() , v.end());
27     for(int i=0 ; i<v.size() ; i++)
28         ret += v[i];
29     return ret;
30 }
31
32 int main()
33 {
34     #ifndef ONLINE_JUDGE
35         freopen("a.in" , "r" , stdin);
36     #endif // ONLINE_JUDGE
37     int T;
38     scanf("%d" , &T);
39     while(T--){
40         scanf("%s%s" , s1 , s2);
41         string t1 = dfs(0 , strlen(s1)-1 , s1);
42         string t2 = dfs(0 , strlen(s2)-1 , s2);
43       //  cout<<t1<<" "<<t2<<endl;
44         printf("%s\n" , (t1==t2)?"same":"different");
45     }
46     return 0;
47 }

转载于:https://www.cnblogs.com/CSU3901130321/p/4543446.html

POJ 1635 树的最小表示法相关推荐

  1. POJ 1635 Subway tree systems 树的Hash 或 树的最小表示法

    题目大意: 就是给出从树的中心开始的dfs序, 根据两个dfs序列判断两棵树是否同构 大致思路: 首先根据dfs一直是从树的中心开始的, 所以不用担心中心的问题, 用树的Hash的话当然可以做 另外一 ...

  2. 树的同构模板题(法1.最小表示法+法2.树哈希)

    树的同构 problem solution code solution code problem 模板题 solution Ⅰ. 最小表示法 将树转化为 0/10/10/1 括号序列:从根开始 dfs ...

  3. 无根树的同构:Hash最小表示法(bzoj 4337: BJOI2015 树的同构)

    这里的同构是指: 对于两棵树A, B,如果能通过重新标号使得两棵树完全相同,则称树A和B同构 Hash最小表示法步骤: ①暴力每个节点为根 ②对于当前根x,对树进行DFS ③DFS时对每个节点维护一个 ...

  4. POJ 3581 Sequence ——后缀数组 最小表示法

    [题目分析] 一见到题目,就有了一个显而易见obviously的想法.只需要每次找到倒过来最小的那一个字符串翻转就可以了. 然而事情并不是这样的,比如说505023这样一个字符串,如果翻转了成为320 ...

  5. POJ3349,洛谷SP4354-SnowflakeSnowSnowflakes【最小表示法,hash】

    正题 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=SP4354 POJ题目链接:http://poj.org/prob ...

  6. 2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)

    题目 前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. ...

  7. 字符串循环同构的最小表示法(转)

    循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S'中字典序最小的一个. 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S'是S的循环同构的串 ...

  8. 2018.07.17 洛谷P1368 工艺(最小表示法)

    传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...

  9. poj1509最小表示法

    题意:       给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小. 思路:       最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j ...

  10. hdu3374最小表示法+KMP

    题意:       给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...

最新文章

  1. JVM:对象的实例化、内存布局与访问定位
  2. Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?
  3. 软件项目开发流程RUP上
  4. Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
  5. STM32F10x_StdPeriph_Lib_V3.5.0库与系统滴答定时器(Systick)
  6. 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗
  7. java u003_我在B站学编程 DAY-003 JAVA基础概念和语法
  8. strcpy与strcat函数原型
  9. 95-130-348-源码-source-kafka相关-Handover
  10. 使用Python完美管理和调度你的多个任务
  11. 前端为什么要工程化?
  12. cout不明确什么意思_王源吸烟粉丝说不袒护,让他谨慎交友是什么意思?
  13. Japan树状数组求逆序数
  14. jrtplib-2.11.2和jthread-1.3.3编译笔记
  15. Linux 内核官网下载
  16. 网易邮箱好用还是TOM邮箱好用?企业邮箱可绑定微信吗?
  17. camera中lookAt的理解
  18. 【BDTC 2016】蚂蚁金服人工智能部技术总监李小龙:人工智能驱动金融生活
  19. 【RPA自动化】selenium教程_元素定位及表格读取
  20. DM数据库:dm.ini参数(一)

热门文章

  1. 一份神奇的礼物(1)
  2. Docker 搭建Spark 依赖singularities/spark:2.2镜像
  3. 通用电气联手软银 签署Predix软件许可协议
  4. DB2数据库对象设计
  5. Android自定义控件7--自定义开关--绘制界面内容
  6. CentOS 安装完成后的配置
  7. CSS中clear:both用法及事例
  8. C# 用装饰模式实现蝌蚪变青蛙的过程-续
  9. mysql使用innodb需要注意的情况
  10. 【TDA4系列】通过MCU域的R5F1_0启动全部核心MAIN域核心(R5F DSP A73)