POJ 1635 树的最小表示法
题目大意:
用一堆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 树的最小表示法相关推荐
- POJ 1635 Subway tree systems 树的Hash 或 树的最小表示法
题目大意: 就是给出从树的中心开始的dfs序, 根据两个dfs序列判断两棵树是否同构 大致思路: 首先根据dfs一直是从树的中心开始的, 所以不用担心中心的问题, 用树的Hash的话当然可以做 另外一 ...
- 树的同构模板题(法1.最小表示法+法2.树哈希)
树的同构 problem solution code solution code problem 模板题 solution Ⅰ. 最小表示法 将树转化为 0/10/10/1 括号序列:从根开始 dfs ...
- 无根树的同构:Hash最小表示法(bzoj 4337: BJOI2015 树的同构)
这里的同构是指: 对于两棵树A, B,如果能通过重新标号使得两棵树完全相同,则称树A和B同构 Hash最小表示法步骤: ①暴力每个节点为根 ②对于当前根x,对树进行DFS ③DFS时对每个节点维护一个 ...
- POJ 3581 Sequence ——后缀数组 最小表示法
[题目分析] 一见到题目,就有了一个显而易见obviously的想法.只需要每次找到倒过来最小的那一个字符串翻转就可以了. 然而事情并不是这样的,比如说505023这样一个字符串,如果翻转了成为320 ...
- POJ3349,洛谷SP4354-SnowflakeSnowSnowflakes【最小表示法,hash】
正题 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=SP4354 POJ题目链接:http://poj.org/prob ...
- 2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)
题目 前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. ...
- 字符串循环同构的最小表示法(转)
循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S'中字典序最小的一个. 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S'是S的循环同构的串 ...
- 2018.07.17 洛谷P1368 工艺(最小表示法)
传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...
- poj1509最小表示法
题意: 给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小. 思路: 最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j ...
- hdu3374最小表示法+KMP
题意: 给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...
最新文章
- JVM:对象的实例化、内存布局与访问定位
- Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?
- 软件项目开发流程RUP上
- Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
- STM32F10x_StdPeriph_Lib_V3.5.0库与系统滴答定时器(Systick)
- 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗
- java u003_我在B站学编程 DAY-003 JAVA基础概念和语法
- strcpy与strcat函数原型
- 95-130-348-源码-source-kafka相关-Handover
- 使用Python完美管理和调度你的多个任务
- 前端为什么要工程化?
- cout不明确什么意思_王源吸烟粉丝说不袒护,让他谨慎交友是什么意思?
- Japan树状数组求逆序数
- jrtplib-2.11.2和jthread-1.3.3编译笔记
- Linux 内核官网下载
- 网易邮箱好用还是TOM邮箱好用?企业邮箱可绑定微信吗?
- camera中lookAt的理解
- 【BDTC 2016】蚂蚁金服人工智能部技术总监李小龙:人工智能驱动金融生活
- 【RPA自动化】selenium教程_元素定位及表格读取
- DM数据库:dm.ini参数(一)