jzoj 3957 鸡腿の花园
Description
鸡腿是CZYZ的著名DS,他为了树立高富帅的伟大形象决定暑假去张江大学学习(游玩)。张江大学自古以来就是充满了各种程序猿的地方,这里的花园自然也是十分奇葩,充满了符合程序猿口味的东西。鸡腿来到张江,自己也打理了一个小花园,小花园里种满了二叉树!
二叉树是什么呢,一棵树,除了根节点之外每个点都有父亲节点,同时每个节点只会有0个、1个或者2个孩子的树。
【问题の描述】
鸡腿在种树的过程中发现有两棵二叉树长的骨骼清奇,是树中极品。为了仔细研究这两颗树,鸡腿决定要研究一下这两棵树的共同点。鸡腿想让你帮他算一算,这两棵树上有多少相同的子树。
相同的子树指树A中的子树a和树B中的子树b完全相同,二叉树的相同定义为树上总节点个数相同,根节点孩子数相同,而且两棵子树分别相同。当然,孩子节点是有先后顺序的!
Data Constraint
对于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 鸡腿の花园相关推荐
- JZOJ 5461 购物 —— 贪心
题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...
- 新手也能立即上手,用Python90多行代码画出“樱花园”仙境(源码+注释)
还记得在大学时,靠近西边有一片特别大的樱花园,每到3-4月,樱花开了,美的啊!那片区域特别多学妹与学姐来拍照,男生个个面如带花,实际心如一头狼,就想偶遇个小学妹,不怕嘲笑,我也去蹲点过,还幸运的与校园 ...
- 《CSS 禅意花园》读书笔记1
最近有点忙..但有的事情开始写博客就不能停下来. <<CSS 禅意花园>>读书笔记1(基础篇---------上) 在假期中买一本<<CSS 禅意花园>> ...
- calendar获取月份少一个月_6月份,花园小学、铁岭小学等哈尔滨南岗校区部分二手房量价齐涨...
6 月,哈市民办初中招生政策调整.南岗区部分小学五年一学位锁定制.新生入学购房.落户时间实行限定等系列入学政策落地,哈市二手房市场受到影响,尤其是南岗区二手学区房市场.其中,铁岭小学南岗校区.花园小区 ...
- 番茄花园 Ghost XP SP3 金秋国庆版 2013.AA0
番茄花园 Ghost XP SP3 金秋国庆版 2013.AA0 下载地址:http://www.xiazaijidi.com/win7/fanqie/58.html 文件名称:FQ_GhostXP_ ...
- [Story]狗尾草花园
不知道为什么,很多年过去,我却依然记得这个故事. 很小的时候,大概四.五岁吧, 在河滩上和几个姐姐,一起玩过家家. 他们大概十三,四岁吧,反正比我大好多. 分成两组,我在我们一组当然是小卒子.搬搬泥, ...
- P1133 教主的花园
P1133 教主的花园 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教 ...
- 中加减乘除_【泓泰花园】精雕细琢的好房子,加减乘除里都是幸福
泓泰花园屹立于大湾区东部潮头大亚湾西区,北面紧邻城市主干道龙海二路,拥双向六车道,向西连接坪山丹梓大道,南面与卓越东部蔚蓝海岸相连,尽享三大主流出行的速度与精彩.项目占地4万m,总建面约20万m,规划 ...
- 【腾讯第二届校园编程马拉松】HDU-4525,威威猫系列故事——吃鸡腿
原题传送门:威威猫系列故事--吃鸡腿 题目如下(添加了部分陷阱提示,以加粗加下划线显示) Problem Description 威威猫不是一只普通的猫,普通的猫喜欢吃鱼,但威威猫最喜欢吃鸡腿.他每天 ...
- 番茄花园该打,反垄断更该升级
番茄花园该打,反垄断更该升级 (本文仅部分转载,全文请看<互联网周刊>2008年9月下旬刊) 姜奇平 中国社科院信息化研究中心秘书长 在打击番茄花园上,政府被微软利用了.作为补偿,对微软也 ...
最新文章
- laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了
- 三相全桥电压型PWM逆变器(交直交)Simulink仿真
- java堆内存 和栈内存
- hadoop datanode启动失败
- java peer_Java PeerConnection.getStats方法代码示例
- origin如何绘制双y轴曲线_Origin对曲线进行多峰拟合
- Redis学习总结(15)——Redis 基本数据类型使用场景
- hibernate基本类型映射
- centos7 java程序突然停止运行没有报错日志_CentOS7.5安装zookeeper3.4.10
- 使用手机访问 Office 文档
- root+android+8.0,荣耀8 root两步强刷Android 8.0
- 小区门口的健身房,就是韭菜收割厂
- 【转】联普多WAN口路由器是否可以设置叠加带宽
- 第6章 系统数据文件和信息
- 【Linux操作系统】——Linux命令
- 泛函分析简列:度量空间之列紧集
- android hero动画,主动画 (Hero animations)
- 你误把饥渴当成了爱情
- git中的配置文件(/etc/gitconfig,${HOME}/.gitconfig,.git/config)
- unity全息技术入门打包至真机详解