• 题解

    • 无标号树的HASH:
    • 找到树的重心,以重心为根求出括号序列;
    • 由于树的重心最多只有两个,取字典序的最小括号序列HASH即可
    • 树的括号序列$s_{u}="(s_{v_{1}},s_{v_{2}},s_{v_{3}},...,s_{v_{n}})"$,同时字典序$s_{v_{1}} <= s_{v_{2}} <= ,... $
    • 有标号树的HASH:
    • 个人认为可以直接$prufer$序列$HASH$
    • 或者直接将儿子排个序$hash$,(总之乱搞)
    •  #include<bits/stdc++.h>
      #define ll long long
      #define mod 998244353
      using namespace std;
      const int N=;
      int n,m,hd[N],o,sz[N],mx[N],Mx,tot;
      struct Edge{int v,nt;}E[N<<];
      map<int,int>h;
      string now,s[N],tmp[N];
      void adde(int u,int v){
      E[o]=(Edge){v,hd[u]};hd[u]=o++;
      E[o]=(Edge){u,hd[v]};hd[v]=o++;
      }
      void get_rt(int u,int fa){
      sz[u]=;mx[u]=;
      for(int i=hd[u];~i;i=E[i].nt){
      int v=E[i].v;
      if(v==fa)continue;
      get_rt(v,u);
      sz[u]+=sz[v];
      mx[u]=max(mx[u],sz[v]);
      }
      mx[u]=max(m-sz[u],mx[u]);
      if(mx[u]<Mx)Mx=mx[u];
      }
      void dfs(int u,int fa){
      s[u]="(";
      for(int i=hd[u];~i;i=E[i].nt){
      int v=E[i].v;
      if(v==fa)continue;
      dfs(v,u);
      }
      tot=;
      for(int i=hd[u];~i;i=E[i].nt){
      int v=E[i].v;
      if(v==fa)continue;
      tmp[++tot]=s[v];
      }
      sort(tmp+,tmp+tot+);
      for(int i=;i<=tot;i++)s[u]=s[u]+tmp[i];
      s[u]+=")";
      }
      int main(){
      #ifndef ONLINE_JUDGE
      freopen("bzoj4337.in","r",stdin);
      freopen("bzoj4337.out","w",stdout);
      #endif
      scanf("%d",&n);
      for(int I=;I<=n;I++){
      o=;memset(hd,-,sizeof(hd));
      scanf("%d",&m);
      for(int i=,x;i<=m;i++){
      scanf("%d",&x);
      if(x)adde(x,i);
      }
      Mx=m;get_rt(,);
      now="";
      for(int i=;i<=m;i++)if(Mx==mx[i]){
      dfs(i,);
      if(now<s[i])now=s[i];
      }
      ll x=;
      for(int i=;i<(int)now.length();i++){
      x = ((x<<) + now[i])%mod;
      }
      //printf("%s\n",now.c_str());
      if(!h[x])h[x]=I;
      printf("%d\n",h[x]);
      }
      return ;
      }

      bzoj4337


【bzoj4337】【Bjoi2015】树的同构的更多相关文章

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

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

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

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

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

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

  4. BZOJ4337: BJOI2015 树的同构(hash 树同构)

    题意 题目链接 Sol 树的同构问题,直接拿hash判一下,具体流程大概是这样的: 首先转化为有根树,预处理出第\(i\)棵树以\(j\)为根时的hash值. 那么两个树同构当且仅当把两棵树的hash ...

  5. bzoj4337: BJOI2015 树的同构

    hash大法好 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ...

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

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

  7. BZOJ 4337: BJOI2015 树的同构 树hash

    4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数 ...

  8. BZOJ4337:[BJOI2015]树的同构——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4337 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根, ...

  9. 4337: BJOI2015 树的同构

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

  10. [BJOI2015]树的同构

    嘟嘟嘟 判断树的同构的方法就是树上哈希. 如果树是一棵有根树,那么只要从根节点出发dfs,每一个节点的哈希值等于按传统方式算出来的子树的哈希值的结果.需要注意的是,算完子树的哈希值后要先排序再加起来, ...

随机推荐

  1. Mac 终端快捷键

    ctrl+A           跳转到行开头 ctrl+E           跳转到行结尾 ctrl+U           清空当前行 Command+K 清屏 Command+→多终端页面跳转 ...

  2. partprobe命令详解

    基础命令学习目录首页 原文链接:https://www.jb51.net/LINUXjishu/389836.html linux上,在安装系统之后,可否创建分区并且在不重新启动机器的情况下系统能够识 ...

  3. js最简单的动画

    $(document).ready(function(){ //�ֶ�����ҳ��Ԫ�� $("#reset").click(function(){ $("*" ...

  4. Scrum立会报告+燃尽图(十二月五日总第三十六次):Final阶段分配任务

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  5. No.1000_第五次团队会议

    光辉的一夜 今夜注定是不平凡的一夜.是崔强同学伟大的一夜. 昨天因为实验室项目,我刚上完编译课就被学院叫走去做项目,当时我就很无奈,因为说好了要和崔强一起实现下午的前端,他写界面我写底层逻辑,这样我们 ...

  6. Daily Scrumming* 2015.10.30(Day 11)

    一.总体情况总结 今日项目总结: 1.前后端同一了API设计以及API权限认证.用户状态保存的开发方案 2.API以及后端模型已经开始开发,前端UEditor开始学习,本周任务有良好的起步 3.前后端 ...

  7. 超级迷宫之NABCD

    模式之一:双人模式 N:基于双人之间的竞争与协作,朋友之间可以有一个竞争比赛,一决高下,男女朋友之间适合双人协作模式,共同完成游戏. A:双人竞争模式为双人同起点或不同起点来进行游戏,在竞争的紧张压力 ...

  8. 软件项目的开发之svn的使用

    Svn简介 SVN全名Subversion,即版本控制系统.SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操作系统.作为一个开源的版本控制系统,Subversion管理着随时间改变的数据.这 ...

  9. Leetcode题库——19.删除链表的倒数第 n 个节点【##】

    @author: ZZQ @software: PyCharm @file: removeNthFromEnd.py @time: 2018/9/26 21:56 说明:给定一个链表,删除链表的倒数第 ...

  10. Maven教程--02设置Maven本地仓库|查看Maven中央仓库

    一:设置Maven本地仓库 Maven默认仓库的路径:~\.m2\repository,~表示我的个人文档:例如:C:\Users\Edward\.m2\repository:如下图: Maven的配 ...