4337: BJOI2015 树的同构

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=4337

Description

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

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

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

对于两个树T1和T2,如果能够把树T1的所有点重新标号,使得树T1和树T2完全相

同,那么这两个树是同构的。也就是说,它们具有相同的形态。

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

Input

第一行,一个整数M。

接下来M行,每行包含若干个整数,表示一个树。第一个整数N表示点数。接下来N

个整数,依次表示编号为1到N的每个点的父亲结点的编号。根节点父亲结点编号为0。

Output

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

Sample Input

4

4 0 1 1 2

4 2 0 2 3

4 0 1 1 1

4 0 1 2 3

Sample Output

1

1

3

1

Hint

【样例解释】

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

100% 的数据中,1 ≤ N, M ≤ 50。

题意

题解

从树的重心开始hash,因为重心最多两个。

然后找到树的最小表示就好了。

代码

#include<bits/stdc++.h>
using namespace std; const int maxn = 555;
int f[maxn],son[maxn],n,mx;
vector<int>E[maxn];
string h[maxn],h2[maxn],ha[maxn];
void getroot(int x,int fa)
{
son[x]=1,f[x]=0;
for(int i=0;i<E[x].size();i++)
{
int p=E[x][i];
if(p==fa)continue;
getroot(p,x);
son[x]+=son[p];
f[x]=max(f[x],son[p]);
}
f[x]=max(f[x],n-son[x]);
mx=max(f[x],mx);
}
void init()
{
for(int i=1;i<=n;i++)E[i].clear();
mx=0;
memset(f,0,sizeof(f));
memset(son,0,sizeof(son));
}
void dfs(int x,int fa){
h[x]="(";
for(int i=0;i<E[x].size();i++){
int v = E[x][i];
if(v!=fa)dfs(v,x);
}
int now=0;
for(int i=0;i<E[x].size();i++){
int v = E[x][i];
if(v!=fa)
h2[now++]=h[v];
}
sort(h2,h2+now);
for(int i=0;i<now;i++)
h[x]+=h2[i];
h[x]+=")";
}
string get()
{
scanf("%d",&n);
init();
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
if(x){
E[x].push_back(i);
E[i].push_back(x);
}
}
getroot(1,0);
string tmp = "";
for(int i=1;i<=n;i++){
if(f[i]==mx)
{
dfs(i,0);
if(h[i]>tmp)tmp=h[i];
}
}
return tmp;
}
int main()
{
int q;scanf("%d",&q);
for(int i=1;i<=q;i++)
ha[i]=get();
for(int i=1;i<=q;i++){
for(int j=1;j<=i;j++){
if(ha[i]==ha[j]){
cout<<j<<endl;
break;
}
}
}
}

BZOJ 4337: BJOI2015 树的同构 树hash的更多相关文章

  1. BZOJ4337:[BJOI2015]树的同构(树hash)

    Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如 ...

  2. [BZOJ4337][BJOI2015]树的同构(树的最小表示法)

    4337: BJOI2015 树的同构 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1023  Solved: 436[Submit][Status ...

  3. bzoj4337: BJOI2015 树的同构 树哈希判同构

    题目链接 bzoj4337: BJOI2015 树的同构 题解 树哈希的一种方法 对于每各节点的哈希值为hash[x] = hash[sonk[x]] * p[k]; p为素数表 代码 #includ ...

  4. BZOJ.4337.[BJOI2015]树的同构(树哈希)

    BZOJ 洛谷 \(Description\) 给定\(n\)棵无根树.对每棵树,输出与它同构的树的最小编号. \(n及每棵树的点数\leq 50\). \(Solution\) 对于一棵无根树,它的 ...

  5. [BJOI2015]树的同构 && 树哈希教程

    题目链接 有根树的哈希 离散数学中对树哈希的描述在这里.大家可以看看. 判断有根树是否同构,可以考虑将有根树编码.而编码过程中,要求保留树形态的特征,同时忽略子树顺序的不同.先来看一看这个方法: 不妨 ...

  6. BZOJ4337 树的同构 (树哈希)(未完成)

    样例迷,没过 交了30pts #include <cstdio> #include <iostream> #include <cstring> #include & ...

  7. bzoj 4337 树的同构

    4337: BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树 ...

  8. 4337: BJOI2015 树的同构

    题解: 树的同构的判定 有根树从根开始进行树hash 先把儿子的f进行排序 $f[i]=\sum_{j=1}^{k} { f[j]*prime[j]} +num[i]$(我没有仔细想这样是不是树是唯一 ...

  9. 【BZOJ4337】BJOI2015 树的同构 括号序列

    [BZOJ4337]BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱 ...

随机推荐

  1. js-特效部分学习-offsetParent、scrollHeight 、动画函数的封装

    1. offsetParent  获取的最近的定位的父元素   offsetLeft/offsetTop  是相对于offsetParent的距离 offsetHeight/offsetWidth 获 ...

  2. win10使用Composer-Setup安装Composer以及使用Composer安装Yii2最新版

    1:下载 ca-bundle.crt和cacert.pem 将这两个文件放在php目录下 2:php.ini中添加上述两个文件的路径 curl.cainfo=C:/xampp/php/ca-bundl ...

  3. Jade之Template Inheritance

    Template inheritance jade支持通过关键字block和extends来实现模板继承. 比如,在layout.jade写上如下代码 html head title My Site ...

  4. ThinkPHP 模板判断输出--Switch 标签

    ThinkPHP 模板引擎支持 switch 判断,根据不同情况输出不同的值,格式如下:<switch name="变量名" >    <case value=& ...

  5. (转)windows下安装nodejs及框架express

    转自:http://jingyan.baidu.com/article/456c463b60fb380a583144a9.html windows下安装nodejs及框架express nodejs从 ...

  6. Fix network adapter not present problem in cloned CentOS

    (You can find a lot of articles on this from the internet. I just put it here for my own record.) It ...

  7. We have detected that MySQL products under the Commercial license are installed. In order to proceed with this GPL installation these Commercial

    下载了MySQL 5.6.15,在安装时,出现了下面的提示信息: 按提示信息的要求单击“是”,结果安装就无法进行下去. 从提示信息上看,意思是指电脑中原来安装有商业版的许可,现在要转换成为GPL许可. ...

  8. MongoDB基本概念

    MongoDB是一种强大灵活可扩展的数据存储方式,它扩展了关系数据库的众多功能.MongoDB的功能非常丰富,但是却非常容易上手和便于使用,今天来了解一下MongoDB的主要概念. 文档 文档是的核心 ...

  9. 一步一步搭建客服系统 (6) chrome桌面共享

    本文介绍了如何在chrome下用webrtc来实现桌面共.因为必要要用https来访问才行,因此也顺带介绍了如何使用SSL证书. 1 chrome扩展程序 先下载扩展程序示例: https://git ...

  10. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...