P5043 【模板】树同构([BJOI2015]树的同构

题目描述

树是一种很常见的数据结构。

我们把NNN个点,N−1N−1N−1条边的连通无向图称为树。

若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树。

对于两个树T1T_1T1​和T2T_2T2​,如果能够把树T1T_1T1​的所有点重新标号,使得树T1T_1T1​和树T2T_2T2​完全相同,那么这两个树是同构的。也就是说,它们具有相同的形态。

现在,给你MMM个有根树,请你把它们按同构关系分成若干个等价类。

输入格式

第一行,一个整数MMM。

接下来MMM行,每行包含若干个整数,表示一个树。第一个整数NNN表示点数。接下来NNN个整数,依次表示编号为111到NNN的每个点的父亲结点的编号。根节点父亲结点编号为000。

输出格式

输出MMM行,每行一个整数,表示与每个树同构的树的最小编号。

输入输出样例

输入 #1

4
4 0 1 1 2
4 2 0 2 3
4 0 1 1 1
4 0 1 2 3

输出 #1

1
1
3
1

说明/提示

编号为1,2,41, 2, 41,2,4 的树是同构的。编号为333 的树只与它自身同构。

100%100\%100% 的数据中,1≤N,M≤501\leq N,M\leq501≤N,M≤50

题意

  • 就是给你mmm颗有根树,问与每一棵树同构的最早输入的那棵树是哪一个

题解

  • 树HashHashHash模板题
  • 也就是给每一个节点赋一个值,然后先求出以儿子为根的子树的hashhashhash,然后用进制hashhashhash依次把当前节点和所有儿子结合到一起,显然如果两棵树是同构的,但是如果hashhashhash时的顺序不一样,hashhashhash的结果也是不一样的,所以考虑给所有的儿子的hashhashhash值排序再从小到大做hashhashhash
  • 判断两棵树是否同构不能只是n2n^2n2枚举两颗树的根结点并判断以他们两个为根的树hashhashhash是否相同,相同就是同构的。正确的姿势应该是给每一棵树以每一个节点为根的树hashhashhash排序,然后比较两棵树对应的排序后的数组是否完全一致,如果是,则同构

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
const int base=23333;
const long long mod=998244353;
int ans[maxn][maxn],fa[maxn],n,m,a[maxn];
vector<int> vec[maxn];long long dfs(int cur,int fa) {vector<long long> sta;long long ans=base;for(int i=0;i<vec[cur].size();i++) if(vec[cur][i]!=fa) sta.push_back(dfs(vec[cur][i],cur));sort(sta.begin(),sta.end());for(auto i:sta) ans=ans*base+i;return ans;
}int main() {scanf("%d",&m);for(int i=1;i<=m;i++) {scanf("%d",&a[i]); //n of each treen=a[i];for(int j=1;j<=n;j++) {scanf("%d",&fa[j]);if(!fa[j]) continue;vec[j].push_back(fa[j]);vec[fa[j]].push_back(j);}for(int j=1;j<=n;j++) ans[i][j]=dfs(j,0);sort(ans[i],ans[i]+n+1);int same=i;for(int j=1;j<n;j++) {bool ok=true;if(a[i]!=a[j]) continue;for(int k=1;k<=n;k++) if(ans[j][k]!=ans[i][k]) {ok=false;break;}if(ok) {same=j;break;}}printf("%d\n",same);for(int i=1;i<=n;i++) vec[i].clear();}
}

「洛谷 P5043」:树同构【树哈希】相关推荐

  1. 洛谷 - P5043 【模板】树同构([BJOI2015]树的同构)(树上哈希)

    题目链接:点击查看 题目大意:给出 m 棵树,对于第 i 棵树而言,找到 1 ~ i 中与当前树同构的最小 id 题目分析:判断有向树同构,可以预处理出质数数组 p ,然后树形 dp ,设 u 为当前 ...

  2. 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】

    题目大意 给你\(k\)个点,让这一些点和一号节点断开,删去某一些边,求最小的删去边权之和. 做题的心路历程 做了\(HG\)昨天的模拟赛,深深感觉到了窝的菜,所以为了\(A\)掉T1这一道毒瘤,窝就 ...

  3. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告

    P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...

  4. 「洛谷P1343」地震逃生 解题报告

    P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...

  5. 「洛谷P2397」 yyy loves Maths VI (mode) 解题报告

    P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居 ...

  6. 「洛谷 3768」简单的数学题

    传送门 problem 给定 nnn 和 ppp,求: ∑i=1n∑j=1nijgcd⁡(i,j)\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)i=1∑n​j=1∑n​ijgc ...

  7. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释...

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  8. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

  9. 洛谷——P1047 校门外的树 python实现

    洛谷--P1047 校门外的树 python实现 l, m = map(int, input().split(' ')) trees = [True]*(l+1) for i in range(m): ...

最新文章

  1. 外部电源、锂电池供电自动切换并自动给电池充电的电路
  2. svn文件丢失的解法
  3. android sqlite 参数,Android SQLite3命令详解教程
  4. Android --- TabLayout 每一个选项卡前面加图标
  5. 浅析何时进行概况分析
  6. MFC中获取任务栏大小
  7. fst java_java快速序列化库FST
  8. 继云计算巨头失火事件后,微软决定送数据中心去“泡澡”!
  9. 华三 h3c 单臂路由配置
  10. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门
  11. TraceView工具如何使用
  12. Angular 1 实现多标签页效果
  13. 深信服校园招聘安全攻防A卷
  14. 移动端-K线图-开发
  15. centos 磁盘重新分区操作实践
  16. 斐波那契回调线怎么画_斐波那契回调线的运用
  17. 4家外国支持支付宝支付的域名注册商
  18. 软考高级 真题 2011年下半年 信息系统项目管理师 论文
  19. 011 Verilog原语
  20. 爱情,最幸福的信仰!

热门文章

  1. nodejs模仿优酷网站,有后端
  2. 懒汉克辽尼和铜城的故事
  3. 受Intel的CPU缺货影响,联想在笔记本市场跌至全球第三?
  4. 【算法】动态规划 背包问题 python
  5. SQL Server触发器
  6. python清晰度增强_3行代码Python搞定图片清晰度识别,原来我们看到的不一定是这样的...
  7. 进销存设计与分析_应收明细表(16)
  8. 2023年浙大MBA复试生死线考生的调剂选择
  9. 继鹏城之后再攻蓉城,华为智能体如何高起步?
  10. 美游客猛增 中国在纽约推介新“丝绸之路”旅游