LG P5043 树同构
\(\text{problem}\)
无根树同构的判断
\(\text{Analysis}\)
考虑树哈希,注意使用较正确的哈希方法
无根树同构有个性质
只要判断以这两棵树的重心为根是否同构即可
\(\text{Code}\)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 105, INF = 0x3f3f3f3f, P = 998244353;
int m, n, rt, siz[N], h[N], son[N], hash[N], tot;
struct edge{
int to, nxt;
}e[N];
inline void add(int x, int y)
{
e[++tot] = edge{y, h[x]}, h[x] = tot;
}
void getrt(int x, int fa)
{
siz[x] = 1, son[x] = 0;
for(int i = h[x]; i; i = e[i].nxt)
{
int v = e[i].to;
if (v == fa) continue;
getrt(v, x), siz[x] += siz[v];
son[x] = max(son[x], siz[v]);
}
son[x] = max(son[x], n - siz[x]);
rt = son[x] < son[rt] ? x : rt;
}
int hs[N][N], hv[N];
inline bool cmp(int x, int y){return hv[x] < hv[y];}
int dfs(int x, int fa)
{
int res = 2021; hs[x][0] = 0, siz[x] = 1;
for(int i = h[x]; i; i = e[i].nxt)
{
int v = e[i].to;
if (v == fa) continue;
dfs(v, x), siz[x] += siz[v], hs[x][++hs[x][0]] = v;
}
sort(hs[x] + 1, hs[x] + hs[x][0] + 1, cmp);
for(int i = 1; i <= hs[x][0]; i++) res = ((long long)hv[hs[x][i]] * siz[hs[x][i]] + res) % P;
return hv[x] = res;
}
int main()
{
scanf("%d", &m), son[0] = INF;
for(int j = 1; j <= m; j++)
{
scanf("%d", &n);
tot = 0, memset(h, 0, sizeof h);
for(int i = 1, x; i <= n; i++)
{
scanf("%d", &x);
if (x) add(x, i), add(i, x);
}
rt = 0, getrt(1, 0), hash[j] = dfs(rt, 0);
for(int i = 1; i <= n; i++)
if (i ^ rt && siz[i] == son[rt]) hash[j] = min(hash[j], dfs(i, 0));
for(int i = 1; i <= j; i++)
if (hash[i] == hash[j]){printf("%d\n", i); break;}
}
}
LG P5043 树同构的更多相关文章
- luogu P5043 【模板】树同构 hash 最小表示法
LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法 ...
- uva12489 Combating cancer(树同构)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud https://uva.onlinejudge.org/index.php?opt ...
- BZOJ4337: BJOI2015 树的同构(hash 树同构)
题意 题目链接 Sol 树的同构问题,直接拿hash判一下,具体流程大概是这样的: 首先转化为有根树,预处理出第\(i\)棵树以\(j\)为根时的hash值. 那么两个树同构当且仅当把两棵树的hash ...
- Luogu 5043 【模板】树同构([BJOI2015]树的同构)
BZOJ 4337 简单记录一种树哈希的方法:以$x$为根的子树的哈希值为$\sum_{y \in son(x)}f_y*base_i$,$f_y$表示以$y$为根的树的哈希值,其中$i$表示$f_y ...
- 『Andrew and Chemistry 树同构』
Andrew and Chemistry Description During the chemistry lesson Andrew learned that the saturated hydro ...
- 【CF1252F】Regular Forestation(重心,树同构)
题意:给定一棵n个点的树,问删去某个点之后所有的树同构,这样分割出来的树最多能有几棵 n<=4000 思路:分割成至少两个size相等的联通块之后size必定小于n/2,与树的重心的定义相同 预 ...
- 题解 P5043 【【模板】树同构([BJOI2015]树的同构)】
进入正题 题意:将所有树结构相同的树归类. 思路 嗯,这道题让我们把树的结构归类,自然而然就想到了哈希,我们对这整颗树哈希一遍.然后判同构就十分之简单了.只需要找哈希值一样的树就可以了. 其实真得很简 ...
- P5043 【模板】树同构([BJOI2015]树的同构)
传送门 把所有的树给哈希起来就好了 具体的方法是一个节点的哈希值就是它所有儿子的哈希值给哈希起来,然后以每个节点为根算出它作为根节点的哈希值.那么把每棵树的哈希值排个序,与之前的比较就好了 注意把儿子 ...
- P5043【模板】树同构([BJOI2015]树的同构)
思路:树哈希 提交:1次 题解: 怕不是用的oi-wiki上的公式: \[f_u=size_u\times\sum f_{son_{u,i}}\times Base^{i-1}\] #include& ...
- 洛谷 P5043 树的同构 题解
题面 本题的难度其实不及紫题的难度.主要是在hash时的处理细节比较繁琐: 首先是树hash的模板: long long treehash(int u,int fa) { ]; ; ; for(int ...
随机推荐
- SDK怎么测试?俺不会啊
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/7bc8d1c8.html 你好,我是测试蔡坨坨. 众所周知,在云产品和SaaS蓬勃发展的当下,企业中有许多系统和环节都是依赖 ...
- DHorse操作手册
在介绍DHorse的操作之前,我们先来看一下发布一个系统的流程是什么样的. 发布系统的流程 我们以一个Springboot系统为例,来说明一下发布流程. 1.首先从代码仓库下载代码,比如Gitlab: ...
- pandas中loc和iloc的使用细节
1.缘由 前段时间在使用pandas库中的索引和切片的时候,突然就感觉有点懵,赋值和索引的操作总是报错. 网上的很多资料讲的也非常的浅显,而且使用起来非常不顺手. 于是我就找到很多的网上资料,然后自己 ...
- node-sass报错(Node Sass could not find a binding for your current environment)
解决方案:参考 https://stackoverflow.com/questions/37986800/node-sass-couldnt-find-a-binding-for-your-curre ...
- day36-ThreadLocal
ThreadLocal 线程数据共享和安全 1.什么是ThreadLocal? ThreadLocal的作用,可以实现在同一个线程数据共享,从而解决多线程数据安全问题 当http请求发送到Tomcat ...
- 「Python实用秘技12」像导入模块一样导入ipynb文件
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第12 ...
- SPOJLCMSUM - LCM Sum
简要题意 \(T\) 组数据,每组数据给出一个 \(n\),计算: \[\sum_{i=1}^{n}{\operatorname{lcm}(i,n)} \] \(1 \leq T \leq 3\tim ...
- 史上最简单 OpenCV for C++ 在 Windows 和 Ubuntu 上编译安装使用教程
准备工作 原材料 Ubuntu 系统(非必须,Windows 也可以,主要是 Ubuntu 适合编译) OpenCV 3.4.1 压缩包 OpenCV contrib 3.4.1 压缩包 MinGW( ...
- 设置多个系统---vue-el-admin
1. 修改\src\settings.js const ppp= { title: 'XXXX System', titleZH: 'XXXX系統', flag: 'ppp' } const syst ...
- windows11预览版装WSA心得
这两天心血来潮想要装个WSA(安卓windows子系统),原来一直用的安卓模拟器(mumu啊蓝叠啊逍遥啊),但感觉像wsa这种安卓系统与主系统融合的模式更带感,于是开始了我艰苦的安装(瞎捯饬)之路 我 ...