\(\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;}
}
}

最新文章

  1. bootstrap学习笔记【转】
  2. 微信连WiFi expired timestamp 和sign错误小坑解决
  3. C 符号
  4. sql 第 10条 到20条
  5. PostgreSQL安装详细步骤(windows)
  6. Azure Event Hub 技术研究系列3-Event Hub接收事件
  7. angular JS中使用jquery datatable添加ng-click事件
  8. Android 主题theme说明 摘记
  9. R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)
  10. php中静态变量和静态方法。
  11. redis加固
  12. MFC更换画笔(画刷)颜色以及画眼睛(GDI画图)
  13. 安装完MySQL数据库设置密码
  14. Oracle DML容错处理(2)
  15. 2018年末--积极拥抱h5.转载 大前端时代来临,我们何去何从?
  16. 纯手写SpringMVC到SpringBoot框架项目实战
  17. [BZOJ3585]mex(莫队+分块)
  18. CSS的块级元素和内联元素,以及float
  19. margin-top失效
  20. 【Cf #503 B】The hat(二分)

热门文章

  1. js 获取相同name元素的属性值
  2. Spring之SpringContext
  3. VSCODE 中.art文件识别为html文件
  4. TIE: A Framework for Embedding-based Incremental Temporal Knowledge Graph Completion 增量时序知识图谱补全论文解读
  5. 基于 Spring Cloud 的微服务脚手架
  6. 【ASP.NET Core】MVC操作方法如何绑定Stream类型的参数
  7. ob_DES_艺恩
  8. 一、对称加密(DES加密)
  9. 我的RHCA认证之旅
  10. [常用工具] 基于psutil和GPUtil获取系统状态信息