题面

本题的难度其实不及紫题的难度。主要是在hash时的处理细节比较繁琐;

首先是树hash的模板:

long long treehash(int u,int fa)
{
long long q[];
long long num=;
long long ans=;
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(v==fa) continue;
q[++num]=treehash(v,u);
}
sort(q+,q+num+);
for(int i=;i<=num;i++){
ans=ans*+q[i];
}
return ans*2333+1;
}

对于无根树在数据不多的时候可以依次枚举每个点当根时的根节点的hash值,然后将这些树上hash值变为一组数的hash值;

然后n^2比较每棵树的线性hash值就可以了;

#include <bits/stdc++.h>
using namespace std;
struct littlestar{
int to;
int nxt;
}star[];
long long head[],cnt;
void add(int u,int v)
{
star[++cnt].to=v;
star[cnt].nxt=head[u];
head[u]=cnt;
}
long long myhash[];
long long treehash(int u,int fa)
{
long long q[];
long long num=;
long long ans=;
for(int i=head[u];i;i=star[i].nxt){
int v=star[i].to;
if(v==fa) continue;
q[++num]=treehash(v,u);
}
sort(q+,q+num+);
for(int i=;i<=num;i++){
ans=ans*+q[i];
}
return ans*2333+1;
}
long long lala[];
long long ans[];
int main ()
{
int t;
cin>>t;
for(int i=;i<=t;i++){
memset(head,,sizeof(head));
memset(lala,,sizeof(lala));
cnt=;
int n;
cin>>n;
int root=;
for(int j=;j<=n;j++){
int x;
scanf("%d",&x);
if(x==){
root=j;
continue;
}
add(x,j);
add(j,x);
}
for(int j=;j<=n;j++) myhash[j]=treehash(j,);
sort(myhash+,myhash++n);
for(int j=;j<=n;j++) lala[j]=lala[j-]*myhash[j]+;
ans[i]=lala[n];
for(int j=;j<=i;j++){
if(ans[i]==ans[j]){
cout<<j<<endl;
break;
}
}
}
return ;
}

最新文章

  1. 关于datepicker只显示年、月、日的设置
  2. async.whilst 的一个简化版实现
  3. SCRUM报告(1)
  4. GBDT和RF的区别
  5. GSM cell phone calls use outdated encryption that can now be cracked with rainbow tables on a PC
  6. struts2更新版本操作有关事项备注
  7. C++ ADO 数据查询
  8. ↗☻【编写可维护的JavaScript #BOOK#】第8章 避免“空比较”
  9. interactive_timeout和wait_timeout(
  10. Java的内存泄漏_与C/C++对比(转载总结)
  11. 在eclipse下编译hadoop2.0源码
  12. 使用GDB生成coredump文件【转载】
  13. MyCAT部署及实现读写分离(转)
  14. postgresql优化数据的批量插入
  15. RTB撕开黑盒子 Part 4: Shady Bidding
  16. android 定时器(Handler Timer Thread AlarmManager CountDownTimer)
  17. bzoj:1700: [Usaco2007 Jan]Problem Solving 解题
  18. JVM学习(一)
  19. SRS-开源流媒体服务器
  20. React 组件

热门文章

  1. C语言 - 堆和栈
  2. 信息提示框:MessageBox
  3. 【转】diamond专题(三)—— diamond架构
  4. 2018-2019-2 网络对抗技术 20165232 Exp 8 Web基础
  5. TensorFlow基本计算单元——变量
  6. weblogic域,管理服务器,受管服务器,集群和机器的基本知识
  7. SpringBoot上传文件临时失效问题
  8. 浅谈2-SAT
  9. 转载 Golang []byte与string转换的一个误区
  10. SpringBoot 启动流程