树的同构 poj 1635

DSI3接口介绍 DSI3(distributed system interface)分布式系统接口,是一种强大且通用的总线协议,旨在将多个遥感器和执行器互连到中央控制模块。在单总线中集成了电压信号、电流信号还有电源,甚至引用了3位状态机概念(反向数据),从逻辑0/1扩展到了0/1/2。 阅读详情

链接

http://poj.org/problem?id=1635

题意


判断两个有根树是否同构。


解析


判断两个有根树是否同构,本质上是hash应用,每个点的权值是这个子树的权值和。树上某一组合不同都会导致最终结构的不同。


代码

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
using namespace std;
const int maxn = 3000+10;
typedef long long LL;
vector<int>G1[maxn];
vector<int>G2[maxn];
int p1[maxn], p2[maxn];
struct hash{
    int length;
    LL value;
    hash():length(0), value(0){}
    hash(char c):length(1), value(c){}
    hash(int l, LL v):length(l), value(v){}
    bool operator < (const hash &a) const
    {
        return value<a.value;
    }
};
const LL magic = 321;
LL pow(LL a, int b){
    LL res = 1;
    while (b) {
        if (b & 1) 
            res *= a;
        a *= a;
        b>>=1;
    }
    return res;
}

hash operator + (const hash &a, const hash &b)
{
    return hash(a.length+b.length, a.value*pow(magic, b.length)+b.value);
}

void operator += (hash &a, const hash &b){
    a = a+b;
}

vector<hash>child[maxn];
hash dfs(int pre, int cur, vector<int>G[maxn]) {
    hash ret;
    child[cur].clear();
    for (int i=0; i<G[cur].size(); i++) {
        if (G[cur][i] == pre)
            continue;
        child[cur].push_back(dfs(cur, G[cur][i], G));
    }
    sort(child[cur].begin(), child[cur].end());
    for (int i=0; i<child[cur].size(); i++) 
        ret += child[cur][i];
    ret = '(' + ret + ')';
    return ret;
}

LL gethash(int root, vector<int>m[maxn]) {
    return dfs(-1, root, m).value;
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        char s[maxn];
        scanf("%s", s);
        int slen = strlen(s);
        int t=0;
        int now = 0;
    for (int i=0; i<slen; i++)
        G1[i].clear(), G2[i].clear();

        for (int i=0; i<slen; i++) {
            if (s[i] == '1')
                now = p1[now];
            else
            {
                t++;
                G1[now].push_back(t);
                p1[t] = now;
                now = t;
            }
        }
        char p[maxn];
        scanf("%s", p);
        int plen = strlen(p);
        t = 0;
        now = 0;
        for (int i=0; i<plen; i++) {
            if (p[i] == '1') 
                now = p2[now];
            else {
                t++;
                G2[now].push_back(t);
                p2[t] = now;
                now = t;
            }
        }
    if (slen != plen) {
        puts("differrent");
            continue;
    }
        LL tree1 = gethash(0, G1);
        LL tree2 = gethash(0, G2);
        if (tree1 == tree2)
            puts("same");
        else
            puts("different");
    }
    return 0;
}
【推荐100个unity插件】基于节点的程序化无限地图生成器 —— MapMagic 2 MapMagic 2是一款基于节点的程序化地形生成工具,可快速创建无限地图。主要功能包括:通过图形化节点编辑器构建地形逻辑;支持四个核心模块(对象、样条线、生物群落和笔刷);提供完整的操作指南,包括创建资产、使用编辑器窗口、节点操作等。工具具有直观的UI界面,支持节点连接、参数调整、图层管理等功能,并能实时生成地形。适合游戏开发者快速构建高质量的可玩地形环境。 阅读详情

相关推荐

Meta-RL之Meta-Gradient Reinforcement Learning

这篇文章是用元学习算法去学习RL的超参数η={γ,λ}\eta=\{\gamma,\lambda\}η={γ,λ}。当然不仅限于这2个超参数,还可以是和回报相关的超参数。 本文的核心思想:我们之前接触过Meta-Learning参数的初始化(MAML、Reptile)以及Meta-Learning参数的更新优化(L2L-by-gd-by-gd、Opt as a model for few-shot learning),那么这篇就是能否Meta-Learning到η={γ,λ}\eta=\{\gamma,\l

Ton的博客 2520

有根树的同构

有根数的同构 题目大意 主要是判断给你的k棵有根树,问哪几个树是同构的 发一下原题吧: 图的同构是指两个图“相同”,这有着广泛的应用。比如当我们要对一批图施行某种操作的时候,如果我们能发现其中一些图是同构的,我们就可以在这些同构的图中只保留一个,从而降低工作量。比如,上图中的T1和T3就是同构的。 下面我们给出图的同构的定义。给出两个图G1=(V1,E1),G2=(V2,E2)。如果存在一个V1到...

jay_zai的博客 721

别再硬编码了!Flowable工作流动态审批人配置全解析(Spring Boot集成版)

本文深入解析Flowable工作流在Spring Boot中的动态审批人配置技术,通过角色、部门等变量实现审批流程的灵活设计。文章详细介绍了架构原理、前端配置映射、动态候选组解析及查询优化方案,帮助企业提升审批流程的适应性和维护效率。

weixin_30919571的博客 135

Vijos1683 有根树的同构问题

题目链接 题目讲了这么多,其实就是让我们从k个树中找到“一样”的树 上图两棵树就是同构的 也就是说,两棵树通过交换树链位置可以变成完全相同的树,这两棵树就是同构的 于是算法就出来了,我们可以把每棵树按一定规则交换树链位置,判断是否完全相同 *怎么做呢? 1、首先用括号表示法表示每棵树,()代表一个节点 例如: 1-&gt;2 1-&gt;3 表示为 (()()) 2、对于每...

星梦的博客 840

一文带你弄懂thermal governor IPA

当current temp < target temp时,使用k_pu,当current temp >= target temp时,使用k_po。如果current_temperature = switch_on_temp时,则k_p = k_pu,这时Pmax。如果current_temperature = target_temp时,则k_p = k_po,这时Pmax。2、解析dts,获得switch_on_temp和target_temp。3、初始化k_pu/k_po/k_i/k_d的常数。

yxw0609131056的博客 1245

SAP Joule for Developers 全景解析:从 ABAP 到 SAP Build 的一体化开发者 AI 能力

SAP Joule for Developers是一套内嵌于SAP开发工具的设计时AI能力,专为提升SAP开发者效率而设计。它支持自然语言生成应用与自动化流程,帮助理解优化代码,并嵌入单元测试和质量保障功能。Joule深度集成ABAP开发环境,同时服务于Java、JavaScript和低代码开发,覆盖CAP数据模型、UI5/Fiori生成、ABAP代码补全与重构等场景。通过斜杠命令和上下文操作,开发者可在不改变现有平台的前提下,显著提升开发效率和质量。典型案例包括快速构建CAP应用和ABAP Cloud迁移

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 497

Jzoj1155 有根树的同构(树的Rabin-Karp)

这里简单说一下rabin-karp 其实就是字符串hash算法,不理解的可以自行百度 对于一颗树,我们可以将其变为一个括号序列,对这个括号序列作rabin-karp,让后就可以轻松判断同构了是不是很简单 细节不多说,有一点必须注意:因为子树是无序的,所以dfs时必须对子树排序 #include #include #include #include using namespace std;

扩展の灰(Extended Ash/Cooevjnz) 693

深度学习助力台风路径预测:技术剖析与实战应用全攻略(基于LSTM模型)

摘要:深度学习技术在台风路径预测领域展现出巨大潜力。通过融合多源气象数据,深度学习模型如LSTM能有效处理时间序列数据,捕捉台风路径变化规律。与传统方法相比,深度学习模型在自动特征学习和处理复杂模式方面具有独特优势,提高了预测的准确性和实时性。然而,挑战依然存在,包括数据质量问题、模型可解释性不足以及极端台风的复杂性。未来,随着观测技术的进步和新算法的开发,深度学习将在台风路径预测中发挥更大作用,为防灾减灾提供更精准的决策支持。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2228

树的同构--poj 1635(有根树)ustc 1117 (无根树)

只有一个点入度为0的树是外向树,只有一个点出度为0的树是内向树,这两种是典型的有根树 平时见到的无向图中的树是无根树 1.判断树同构本质是哈希,每个点的权值是这个点的子树的权值和,这里所谓的权值是随机数产生的 由于随机性,树上某一组合不同都会导致最终的结果不一样,所以只要判断根的权值是否相等就可以确定同构 2.随机性决定了不确定性,但正确率还是很高 3.可以不用哈希,用“最小表示”表示出

Jackyguo1992的专栏 4135

灰质-白质组织对比(Gray-white matter tissue contrast,GWC)计算以及可视化

GWC是深层灰质与浅表白质(superficial white matter,SWM)之间T1加权信号强度的比值,已知髓鞘中的胆固醇是T1加权信号强度的主要影响因素,因此GWC大致反映了大脑皮层和浅表白质之间的髓鞘化差异。GWC代表灰白质交界处的模糊程度,较低的GWC表明灰质和白质交界处更相似和更模糊;较高的GWC表明灰白质分界更加清楚。据之前的研究报道,局灶性皮质发育不良、颞叶癫痫、帕金森病、强迫症、精神分裂症和自闭症谱系障碍中存在灰白质交界区GWC异常增高或降低。 灰质信号强度和白质信号强度采集的示意图

xxx 733

YOLOv11模型改进-模块-引入特征细化模块FRFN 解决小目标、遮挡等问题

FRFN 是一种专门设计的深度学习结构,旨在提高图像处理任务中的特征表示能力。它的核心设计理念是通过逐层细化和优化特征图,从而实现更高的分类和检测精度。1. 特征提取层:通过卷积层提取初始特征,并进行批量归一化以增强稳定性。2. 特征细化模块:在每个模块中,当前层特征图与前一层特征图进行融合,以强化特征表示。3. 跳跃连接:通过跳跃连接保留多尺度信息,帮助缓解深层网络中的信息丢失。4. 非线性激活:使用激活函数(如ReLU)增加模型的非线性能力。5. 输出层。

qq_64693987的博客 3337

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

有根树的同构的意思就是两棵树的形状一样,子树可以旋转,因此,当子树的子节点数相同就可以判断同构 不用建树,只需要利用dfs时遇到'1'的时候回溯就行,开一个数组hash[i] = j表示子结点数为i(包括自己)的结点为j个 0ms无压力 int hash[801];//hash[i] = j表示子结点数为i(包括自己)的结点为j个 int get1(){ int n = 1;

leolin_的专栏 978

YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

双向特征金字塔网络(BiFPN)是一种强化多尺度特征融合支持“自顶向下+自底向上”的双向特征流动,同时保留不同尺度的细节信息;引入加权融合机制,自动学习不同特征的重要性权重;裁剪冗余节点,在轻量化的同时提升融合效率。

m0_64661770的博客 492

poj 1635 树的同构

思路: 因为题目要求的是O(n2)的算法,而且是树不是图,所以思路比较随意,先找每个节点的爸爸,然后记录每个节点有多少个子孙(包括儿子的儿子),然后只有排序之后每个都一样,那树就同构,如果题目要求O(n)的话,就不能找爸爸,直接找儿子,然后深搜。 你还是看代码吧,我感觉我说的不清楚 #include <cstdio> #include <iostream> #include <iomanip> #include <string> #include <cs

Fawkess的博客 184

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

poj1635_树的同构

题意: 这个题首先给出一个01序列,这个序列的意思是,从一个树的根开始遍历,遇到0走到一个孩子,遇到1则当前节点返回到它的父亲节点,最后回到树的根。求对这样两个01序列进行遍历后形成的两颗树是否同构。 分析: 1.这个序列中的0和1个数必须相同,否则无法回到根。有几个0就有几个节点。 2.遍历01序列建树,记录每个节点的深度和孩子个数,然后排序进行比较。 3.一开始,我记录每个节点的孩子...

weixin_30496431的博客 135

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

同构树的判断 poj 1635

题目的描述比较长,总的意思就是给出两棵有根树,判断它们是不是同构树。 所谓的同构树,定义我也不太知道。按字面上的意思就是两棵结构相同的树。 如第一棵树和第二棵树就是同构树,它们和第三棵树不是同构树: 并且,同构树它们有一一对应的点。 对于任意一棵有根树,都可以用括号表示法来表示,可以去http://www.byvoid.com/blog/directed-tree-bracket-

u010152669的专栏 3147

树的最小表示法 poj1635 Subway tree systems

传送门:点击打开链接 题意:有根树,0表示远离根节点,1表示接近根节点,一条边只访问一次。现在告诉你两种访问方式,问这两棵树是否同构异形。 思路:从下向上把子树排序,这样向上,最后表示出来的就是最小表示的了,那么就有序了,就可以直接比较字符串就能判断两棵树是否相同。 #include #include #include #include #include #include #include

qwb的博客 2110

POJ1635【树的同构】【hash】

/* I will wait for you*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define make make_pair #define fi

Lethelody的专栏 592

poj 1635 Subway tree systems(树的同构,经典)

题意: 一个有根树。给一种用01序列来表示该树的方式,0表示前进(沿没有访问过的边),1表示沿树边回退。 一个树当然会有多种表示, 问题是给出两个序列,问是否表示同一颗树。 思路: 感觉判断树的同构是个很广的问题。 不过就此题而言,可以对一颗树的所有表示序列,都可以用递归的方式把它们变成一个。(先划分子树,按字典序重排) 也有用dp做的,还有哈希的。。是很值得研究的一题 这道题引起我对

slowlight93的专栏 700

POJ 1635 树的最小表示

题意 传送门 POJ 1635 Subway tree systems 题解 判断不同 DFSDFSDFS 序对应的有根树是否相同。设字符串长度为 NNN,O(N2)O(N^2)O(N2) 求解树的最小表示,O(N)O(N)O(N) 进行比较。 树的最小表示法基本思路:由于树根的确定,若两颗树同构,那么只有子树和子树中节点次序上的区别。递归与回溯是一一对应的,所以子树的 DFSDFSDFS 序满足 0,10,10,1 个数相等。按照字典序使子树有序,递归求解即可。。 #include <algorit

neweryyy的博客 366

poj 1635( 树的最小表示法判断同构 )

#include #include #include #include #include #include using namespace std; string dfs(char* ss,int s,int t) { int i,j=s,h=0; int cnt=0; vector str; str.clear(); if( s>=t ) { s

Balloons2012的专栏 1777

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

题意:初始时站在树的根节点,若朝着远离根的方向走,记录“0”,接近根的方向走记录“1”。并且树的每一条边只能(必须)来回走一次(即向下和返回)。一个合法的序列可以描述出一棵树的形态。现在给出两个合法的序列,判断两棵树是否同构。 分析:由于根节点确定,若两棵树同构,无非就是把子树的位置交换了一下。很自然的想法就是:将树的子树进行排序,若排序之后两个字符串相等,则同构;否则不同构。 树的括号序列最小表...

常胜将军的博客 367

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

  给两棵有根树,判断是否同构。因为同构的树的最小表示法唯一,那么用最小表示法表示这两棵树,即可判断同构。顺便如果是无根树的话可以通过选出重心以后套用之前的方法。   AC代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 #inclu...

ddmxynl793173的博客 181

POJ1635 Subway tree systems

POJ1635 Subway tree systems Time Limit:1000MS Memory Limit:10000K Total Submissions:5470 Accepted:2248 Description Some major cities have subway systems in the form...

weixin_30419799的博客 156

POJ 1635 Subway tree systems (树的同构)

题意:给出2个深搜过程,确定是否是对同一棵树的遍历。深搜过程是用01串来描述的,0代表远离树根,1代表靠近树根。 分析:利用最小表示的思想,我们将树的所有结点按一定的规则排个序,然后比较2棵树的结点是否一样即可。排序规则:先按深度排序(离树根的距离),深度相同的按以该结点为根的子树结点数目排序。其实排序的过程就是统一遍历规则的过程,利用上面的规则排序后的结点是一个宽度优先的搜索顺序,且同一层中按...

weixin_30361641的博客 97

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

Subway tree systems POJ - 1635 题目大意:给出两串含有‘1’和‘0’的字符串,0表示向下搜索,1表示回溯,这样深搜一颗树,深搜完之后问这两棵树是不是同一棵树 /* 在poj上交需要加一个string头文件,不然会CE 树的最小表示 这里用的最小表示法就是将树的所有子树分别用1个字符串表示,要按字典序排序将他们依依连接起来。...

weixin_30740295的博客 128

POJ 1635 树的最小表示法/HASH

题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根。相当于每个串对应一个有根的树。然后让你判断2个串构成的树是否是同构的。 思路:首先根据01串构造出树,然后求树的最小表示法判断同构。 详情参照:https://www.byvoid.com/blog/directed-tree-bracket-sequence...

weixin_33834075的博客 162
上一篇: 2016 Multi-university-training-contests-2 1006 点双连通分量
下一篇: poj 2112 最大流+二分法
nielaishan
博客等级 码龄11年 7粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值