当前位置: 首页 > news >正文

P10477 Subway tree systems 题解,c++ 树相关题目

题目

poj 链接
洛谷链接

n n n 组数据,每组数据给定两个 01 01 01 串(长度不超过 3000 3000 3000),意思如下:

  • 对于每一个 0 0 0,代表该节点有一个子节点,并前往该子节点。
  • 对于每一个 1 1 1,代表返回该节点的父亲节点。

求两个字符串说表示的树是否同构。
在这里插入图片描述

思路

考虑对于每一个节点进行递归处理(因为可以知道一个大问题可以拆成多个小问题进行计算)。为方便后续操作,可虚构一个根节点的父亲节点(即在字符串开头加上 0 0 0,结尾加上 1 1 1)。

对于每一个节点,我们可以获得一个字符串代表该节点的子树,首先去掉头尾的字符(即去掉通往父亲节点的边),记 S S S 为字符串, c n t cnt cnt 表示 S S S 0 0 0 i i i 0 0 0 的数量与 1 1 1 的数量的差, j j j 表示儿子的数量。容易得到以下结论:

  • 对于 S i = 0 S_i = 0 Si=0,则 c n t ← c n t + 1 cnt \gets cnt + 1 cntcnt+1
  • 对于 S i = 0 S_i = 0 Si=0,则 c n t ← c n t − 1 cnt \gets cnt - 1 cntcnt1
  • 对于 c n t = 0 cnt = 0 cnt=0,即一个儿子已经遍历结束,则 j ← j + 1 j \gets j + 1 jj+1,并统计前一个儿子所代表的子串进行递归。

如果全部儿子所代表的子串递归完毕,可按照字符串排序的方式排列儿子所代表的字符串,并在头尾添上 01 01 01。可以发现,对于两个同构的树,以上操作后获得的字符串相等。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int T;
string a,b;
string paixu(string x) {//cout<<x<<endl;// 分离操作string y = x;int num = x.size(),cnt = 0;x = "";if(num <= 2) return y;for(int i = 1;i < num - 1;i++) x += y[i];num -= 2;string new_string[1505];int j = 1;for(int i = 0;i < num;i++) {if(x[i] == '0') cnt++,new_string[j] += '0';else cnt--,new_string[j] += '1';if(cnt == 0) {j++;}}j--;//递归for(int i = 1;i <= j;i++) new_string[i] = paixu(new_string[i]);//排序for(int i = j;i >= 1;i--) {for(int k = 1;k < i;k++) {if(new_string[k] > new_string[k + 1]) swap(new_string[k],new_string[k + 1]);}}for(int i = 2;i <= j;i++) new_string[1] += new_string[i];//cout<<("0" + new_string[1] + "1")<<endl;return ("0" + new_string[1] + "1");
}
signed main() {scanf("%lld",&T);while(T--) {cin >> a >> b;a = "0" + a + "1";b = "0" + b + "1";if(paixu(a) == paixu(b)) printf("same\n");else printf("different\n");}return 0;
}

相关文章:

P10477 Subway tree systems 题解,c++ 树相关题目

题目 poj 链接 洛谷链接 n n n 组数据&#xff0c;每组数据给定两个 01 01 01 串&#xff08;长度不超过 3000 3000 3000&#xff09;&#xff0c;意思如下&#xff1a; 对于每一个 0 0 0&#xff0c;代表该节点有一个子节点&#xff0c;并前往该子节点。对于每一个 1 1 …...

18.jdk源码阅读之CopyOnWriteArrayList

1. 写在前面 CopyOnWriteArrayList 是 Java 中的一种线程安全的 List 实现&#xff0c;基于“写时复制”&#xff08;Copy-On-Write&#xff09;机制。下面几个问题大家可以先思考下&#xff0c;在阅读源码的过程中都会解答&#xff1a; CopyOnWriteArrayList 适用于哪些场景…...

美股:AMD展现乐观前景,挑战AI加速器市场霸主

在科技行业的激烈竞争中&#xff0c;AMD公司近期发布了对当前季度收入的乐观预测&#xff0c;显示出其新推出 一、AMD第三季度营收预期超越分析师平均预期 AMD在周二的声明中预计&#xff0c;第三季度营收将达到约67亿美元&#xff0c;这一数字超出了分析师此前平均预期的66.…...

如何提高计算机视觉技术在复杂环境和低光照条件下的物体识别准确率?

要在复杂环境和低光照条件下提高计算机视觉技术的物体识别准确率&#xff0c;可以采取以下几个方法&#xff1a; 数据增强&#xff1a;在训练集中添加各种复杂环境和低光照条件下的图片&#xff0c;通过增加数据的多样性&#xff0c;使算法能够更好地适应各种场景。 预处理&am…...

ubuntu cmake使用自己版本的qt

给一篇文章参考 https://blog.csdn.net/bank_dreamer/article/details/138678909 自己使用的范例 set(Qt5_DIR "/home/peak/Qt5.14.0/5.14.0/gcc_64/lib/cmake/Qt5")# 设置Qt5的安装目录 #set(CMAKE_PREFIX_PATH "/home/peak/Qt5.14.0")find_package(Qt5…...

Python基础知识笔记---保留字

保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。 一、保留字概览 二、保留字用途 1. False&#xff1a;表示布尔值假。 2. None&#xff1a;表示空值或无值。 3. True&#xff1a;表示布尔值真。 4. not&#xff1a;布尔逻辑操作符…...

Python面试整理-Web开发

在Python中,Web开发可以利用多种强大的框架和库来构建从简单的静态网页到复杂的动态Web应用。以下是几种流行的Python Web开发框架和相关技术的概述: 1. Flask Flask 是一个轻量级的Web应用框架,它非常灵活,适用于小型到中型项目,或作为构建微服务的基础。Flask的核心非常…...

民大食堂用餐小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;档口号管理&#xff0c;商家餐品管理&#xff0c;餐品种类管理&#xff0c;购物车管理&#xff0c;订单信息管理 微信端账号功能包括&#xff1a;系统首页&a…...

Linux系统编程(4):消息队列

Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。 而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室 以及 BSD&#xff08;加州大学伯克利分校的伯克利软件发布中心&#xff09;&#xff0c; 他们在进程间通信方面的侧重点有所不同&#xff1b; 前…...

【初阶数据结构篇】单链表的实现(赋源码)

文章目录 单链表的实现代码位置概念与结构概念&#xff1a;结构&#xff1a; 链表的性质链表的分类单链表的实现单链表的创建和打印及销毁单链表的创建单链表的打印单链表的销毁 单链表的插入单链表头插单链表尾插单链表在指定位置之前插入数据单链表在指定位置之后插入数据 单…...

LeetCode 2844.生成特殊数字的最少操作(哈希表 + 贪心)

给你一个下标从 0 开始的字符串 num &#xff0c;表示一个非负整数。 在一次操作中&#xff0c;您可以选择 num 的任意一位数字并将其删除。请注意&#xff0c;如果你删除 num 中的所有数字&#xff0c;则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…...

昇思MindSpore 应用学习-基于 MindSpore 实现 BERT 对话情绪识别

基于 MindSpore 实现 BERT 对话情绪识别 模型简介 BERT全称是来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c;它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模…...

【初阶数据结构篇】顺序表和链表算法题

文章目录 顺序表算法题移除元素删除有序数组中的重复项合并两个有序数组 链表算法题移除链表元素反转链表链表的中间结点合并两个有序链表链表分割链表的回文结构 顺序表算法题 不熟悉顺序表的可以先了解一下 顺序表实现方法 移除元素 给你一个数组 nums 和一个值 val&#x…...

使用weex进行APP混合开发

Weex 是一个用于构建高性能原生应用的框架&#xff0c;它使用 Vue.js 的语法和组件模型&#xff0c;允许开发者使用 HTML、CSS 和 JavaScript 来编写应用&#xff0c;同时能够编译成原生应用。Weex 主要由阿里巴巴集团开发&#xff0c;并且已经被多个公司采用。 下面是使用 We…...

C++stl大根堆/小根堆的创建与记忆

priority_queue<int, vector<int>, greater<int>> heap; 这行代码在 C 中声明了一个优先队列 heap&#xff0c;其元素类型为 int&#xff0c;使用 vector<int> 作为其底层容器&#xff0c;并且指定了 greater<int> 作为比较函数对象。 这里的关…...

visual studio性能探测器使用案列

visual studio性能探测器使用案列 在visual studio中&#xff0c;我们可以使用自带的工具对项目进行性能探测&#xff0c;具体如下 1.选择性能探查器 Vs2022/Vs2019中打开方式&#xff1a; Vs2017打开方式&#xff1a; 注意最好将解决方案配置为&#xff1a;Release Debu…...

redis的代码开发

redis是什么? 前提:官网地址https://redis.io 1.Redis是一个开源的,key,value格式的,内存型数据结构存储系统;它可用作数据库、缓存和消息中间件。 value支持多种类型的数据结构如strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglo…...

嗷呜,就问你接不接?

...

避免过拟合,参数大模型强,正则让模型不要走偏

1、加入惩罚项L1【绝对值】 和L2【默认 平方】&#xff0c;降低噪音的影响&#xff0c;减少权重W的值 2、丢弃法 层与层之间加入噪音&#xff0c;只能在全连接层使用 无偏差加入噪音 p为丢弃的概率 x 当概率p是0 否则为除以(1-p) 丢弃概率p 一般为0.1 0.5 def drop_out(x…...

vue+element-ui的列表查询条件/筛选条件太多以下拉选择方式动态添加条件(支持全选、反选、清空)

1、此功能已集成到TQueryCondition组件中 2、最终效果 3、具体源码(新增moreChoose.vue) <template><el-popoverpopper-class"t_query_condition_more":bind"popoverAttrsBind"ref"popover"v-if"allcheckList.length>0"…...

Windows 系统下通过 composer 快速搭建 ThinkPHP6 开发环境及实战配置指南

1. 环境准备&#xff1a;Windows下搭建ThinkPHP6的基础条件 在Windows系统下搭建ThinkPHP6开发环境&#xff0c;首先需要确保基础软件栈的完整性。我遇到过不少新手开发者直接跳过了环境检查环节&#xff0c;结果在后续步骤中频繁报错。这里分享几个必须提前准备好的关键组件&a…...

计算机毕业设计springboot鲜花在线商城 基于SpringBoot的园艺花卉网络销售系统 基于Java Web的线上花店订购管理平台

计算机毕业设计springboot鲜花在线商城911yt9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联xi 可分享近年来&#xff0c;互联网技术的迅猛发展和智能终端设备的全面普及&#xff0c;为传统零售行业带来…...

24小时运行OpenClaw:nanobot定时任务监控方案

24小时运行OpenClaw&#xff1a;nanobot定时任务监控方案 1. 为什么需要24小时运行的OpenClaw&#xff1f; 去年夏天&#xff0c;我因为忘记备份一个重要项目文件而损失了三天的工作量。当时就想&#xff0c;如果能有个"数字管家"帮我定时执行这些重复性任务该多好…...

Mplus路径系数差异比较实战:两种方法详解与选择指南

Mplus路径系数差异比较实战&#xff1a;两种方法详解与选择指南 在结构方程模型分析中&#xff0c;研究者常常需要比较不同路径系数或中介效应是否存在显著差异。比如&#xff0c;你可能想知道性别对工作满意度的直接影响是否显著大于其对组织承诺的影响&#xff0c;或者比较两…...

React Native vs Flutter:一次深入到底的性能对比分析(含原理 + 实战)

目录 一、先说结论&#xff08;避免踩坑&#xff09; 二、架构对比&#xff1a;性能差异的根源 1. React Native 架构 关键点&#xff1a; 2. Flutter 架构 关键点&#xff1a; 3. 核心差异总结 三、性能对比核心维度 四、启动性能&#xff08;App Launch Time&#x…...

如何使用开源音乐格式转换工具彻底解决NCM文件播放限制问题

如何使用开源音乐格式转换工具彻底解决NCM文件播放限制问题 【免费下载链接】ncmppGui 一个使用C编写的转换ncm文件的GUI工具 项目地址: https://gitcode.com/gh_mirrors/nc/ncmppGui 音乐格式转换是数字音乐管理中的常见需求&#xff0c;尤其是面对平台专有格式时。ncm…...

STM32F103重映射实战:GPIO_Remap1_CAN1与GPIO_Remap2_CAN1到底选哪个?

STM32F103重映射实战&#xff1a;GPIO_Remap1_CAN1与GPIO_Remap2_CAN1到底选哪个&#xff1f; 第一次在STM32F103上配置CAN总线时&#xff0c;看到GPIO_Remap1_CAN1和GPIO_Remap2_CAN1这两个选项&#xff0c;我完全懵了——它们有什么区别&#xff1f;为什么需要两个重映射选项…...

如何用3层智能架构构建你的AI开发助手:从零到精通的完整指南

如何用3层智能架构构建你的AI开发助手&#xff1a;从零到精通的完整指南 【免费下载链接】superpowers Claude Code superpowers: core skills library 项目地址: https://gitcode.com/GitHub_Trending/su/superpowers 你是否曾想过&#xff0c;为什么有些开发者能快速完…...

3步实现专业级语音克隆:GPT-SoVITS技术原理与实践指南

3步实现专业级语音克隆&#xff1a;GPT-SoVITS技术原理与实践指南 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS GPT-SoVITS是一款基于GPT架构的少样本语音合成系统&#xff0c;通过结合SoVITS声学模型&#xff0c;仅需5秒…...

【Python异步I/O终极指南】:20年CTO亲授asyncio高并发实战心法,避开97%开发者踩过的12个致命陷阱

第一章&#xff1a;Python异步I/O的本质与演进脉络Python异步I/O并非简单的“多线程替代方案”&#xff0c;其本质是**在单线程内通过事件循环&#xff08;event loop&#xff09;协同调度I/O等待任务&#xff0c;避免CPU空转&#xff0c;实现高并发吞吐**。它依赖操作系统底层…...