Description

【故事の背景】
 
鸡腿是CZYZ的著名DS,他为了树立高富帅的伟大形象决定暑假去张江大学学习(游玩)。张江大学自古以来就是充满了各种程序猿的地方,这里的花园自然也是十分奇葩,充满了符合程序猿口味的东西。鸡腿来到张江,自己也打理了一个小花园,小花园里种满了二叉树!
 
二叉树是什么呢,一棵树,除了根节点之外每个点都有父亲节点,同时每个节点只会有0个、1个或者2个孩子的树。
 
【问题の描述】
 
鸡腿在种树的过程中发现有两棵二叉树长的骨骼清奇,是树中极品。为了仔细研究这两颗树,鸡腿决定要研究一下这两棵树的共同点。鸡腿想让你帮他算一算,这两棵树上有多少相同的子树。
相同的子树指树A中的子树a和树B中的子树b完全相同,二叉树的相同定义为树上总节点个数相同,根节点孩子数相同,而且两棵子树分别相同。当然,孩子节点是有先后顺序的!

Data Constraint

对于20%的数据1 ≤ N,M ≤ 100;
对于40%的数据 1 ≤ N,M ≤ 5,000;
对于100%的数据 1 ≤ N,M ≤ 100,000。

Sol

Hash大法好。

Hash函数随便写,怎么奇怪怎么来。

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
struct Hax{#define HaN 1234007int hea[HaN],net[HaN],fall[HaN],tot;ull key[HaN];int &get(ull _h){static int h;h=_h%HaN;for (int i=hea[h];i;i=net[i])if (key[i]==_h) return fall[i];key[++tot]=_h; net[tot]=hea[h]; hea[h]=tot;return fall[tot];}int Get(ull _h){static int h;h=_h%HaN;for (int i=hea[h];i;i=net[i])if (key[i]==_h) return fall[i];key[++tot]=_h; net[tot]=hea[h]; hea[h]=tot;return fall[tot];}
}f;
#define N 2000007
#define lx 23333
#define rx 998443
int siz[N],ch[N][2],n,m;
ull ha[N],ans;
void dfs(int x){if (ch[x][0]) dfs(ch[x][0]);if (ch[x][1]) dfs(ch[x][1]);siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;ha[x]=ha[ch[x][0]]*ha[ch[x][0]]*lx+ha[ch[x][1]]*rx+siz[x]^siz[ch[x][1]];f.get(ha[x])++;
}
void Dfs(int x){if (ch[x][0]) Dfs(ch[x][0]);if (ch[x][1]) Dfs(ch[x][1]);siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;ha[x]=ha[ch[x][0]]*ha[ch[x][0]]*lx+ha[ch[x][1]]*rx+siz[x]^siz[ch[x][1]];ans+=f.Get(ha[x]);
}
signed main () {freopen("1.in","r",stdin);scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) {scanf("%d%d",ch[i],ch[i]+1); if (ch[i][0]==-1) ch[i][0]=0;if (ch[i][1]==-1) ch[i][1]=0;}dfs(1);memset(ch,0,sizeof ch);memset(siz,0,sizeof siz);memset(ha,0,sizeof ha);for (int i=1;i<=m;i++) {scanf("%d%d",ch[i],ch[i]+1); if (ch[i][0]==-1) ch[i][0]=0;if (ch[i][1]==-1) ch[i][1]=0;}Dfs(1);printf("%u\n",ans); return 0;
}

转载于:https://www.cnblogs.com/rrsb/p/9318168.html

jzoj 3957 鸡腿の花园相关推荐

  1. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  2. 新手也能立即上手,用Python90多行代码画出“樱花园”仙境(源码+注释)

    还记得在大学时,靠近西边有一片特别大的樱花园,每到3-4月,樱花开了,美的啊!那片区域特别多学妹与学姐来拍照,男生个个面如带花,实际心如一头狼,就想偶遇个小学妹,不怕嘲笑,我也去蹲点过,还幸运的与校园 ...

  3. 《CSS 禅意花园》读书笔记1

    最近有点忙..但有的事情开始写博客就不能停下来. <<CSS 禅意花园>>读书笔记1(基础篇---------上) 在假期中买一本<<CSS 禅意花园>> ...

  4. calendar获取月份少一个月_6月份,花园小学、铁岭小学等哈尔滨南岗校区部分二手房量价齐涨...

    6 月,哈市民办初中招生政策调整.南岗区部分小学五年一学位锁定制.新生入学购房.落户时间实行限定等系列入学政策落地,哈市二手房市场受到影响,尤其是南岗区二手学区房市场.其中,铁岭小学南岗校区.花园小区 ...

  5. 番茄花园 Ghost XP SP3 金秋国庆版 2013.AA0

    番茄花园 Ghost XP SP3 金秋国庆版 2013.AA0 下载地址:http://www.xiazaijidi.com/win7/fanqie/58.html 文件名称:FQ_GhostXP_ ...

  6. [Story]狗尾草花园

    不知道为什么,很多年过去,我却依然记得这个故事. 很小的时候,大概四.五岁吧, 在河滩上和几个姐姐,一起玩过家家. 他们大概十三,四岁吧,反正比我大好多. 分成两组,我在我们一组当然是小卒子.搬搬泥, ...

  7. P1133 教主的花园

    P1133 教主的花园 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教 ...

  8. 中加减乘除_【泓泰花园】精雕细琢的好房子,加减乘除里都是幸福

    泓泰花园屹立于大湾区东部潮头大亚湾西区,北面紧邻城市主干道龙海二路,拥双向六车道,向西连接坪山丹梓大道,南面与卓越东部蔚蓝海岸相连,尽享三大主流出行的速度与精彩.项目占地4万m,总建面约20万m,规划 ...

  9. 【腾讯第二届校园编程马拉松】HDU-4525,威威猫系列故事——吃鸡腿

    原题传送门:威威猫系列故事--吃鸡腿 题目如下(添加了部分陷阱提示,以加粗加下划线显示) Problem Description 威威猫不是一只普通的猫,普通的猫喜欢吃鱼,但威威猫最喜欢吃鸡腿.他每天 ...

  10. 番茄花园该打,反垄断更该升级

    番茄花园该打,反垄断更该升级 (本文仅部分转载,全文请看<互联网周刊>2008年9月下旬刊) 姜奇平 中国社科院信息化研究中心秘书长 在打击番茄花园上,政府被微软利用了.作为补偿,对微软也 ...

最新文章

  1. laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了
  2. 三相全桥电压型PWM逆变器(交直交)Simulink仿真
  3. java堆内存 和栈内存
  4. hadoop datanode启动失败
  5. java peer_Java PeerConnection.getStats方法代码示例
  6. origin如何绘制双y轴曲线_Origin对曲线进行多峰拟合
  7. Redis学习总结(15)——Redis 基本数据类型使用场景
  8. hibernate基本类型映射
  9. centos7 java程序突然停止运行没有报错日志_CentOS7.5安装zookeeper3.4.10
  10. 使用手机访问 Office 文档
  11. root+android+8.0,荣耀8 root两步强刷Android 8.0
  12. 小区门口的健身房,就是韭菜收割厂
  13. 【转】联普多WAN口路由器是否可以设置叠加带宽
  14. 第6章 系统数据文件和信息
  15. 【Linux操作系统】——Linux命令
  16. 泛函分析简列:度量空间之列紧集
  17. android hero动画,主动画 (Hero animations)
  18. 你误把饥渴当成了爱情
  19. git中的配置文件(/etc/gitconfig,${HOME}/.gitconfig,.git/config)
  20. unity全息技术入门打包至真机详解

热门文章

  1. Windows下如何批量重命名
  2. 大学生面试 4个问题千万别撒谎
  3. 字节跳动---雀魂启动
  4. 字符串函数strtolower解析
  5. 图片放大模糊怎么办,Python无损清晰放大,360P变4K
  6. 【人生如逆旅,我亦是行人】-半年总结
  7. 面向金融机构的阿里云SDWAN解决方案解读
  8. 云词:让英语学习平步青云
  9. arcgis多面体数据转面_多面体转 Collada (转换)
  10. Windows10系统桌面美化,定制自己的专属桌面.