思路:树哈希

提交:1次

题解:

怕不是用的oi-wiki上的公式:

\[f_u=size_u\times\sum f_{son_{u,i}}\times Base^{i-1}
\]

#include<bits/stdc++.h>
#define R register int
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0; register I f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
}
#define u32 unsigned int
const int N=60,Inf=1e+9;
const u32 B=23333u;
int T,n[N],cnt,sum;
int vr[N<<1],nxt[N<<1],fir[N];
inline void add(int u,int v) {
vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;
vr[++cnt]=u,nxt[cnt]=fir[v],fir[v]=cnt;
}
int sz[N],mx[N];
u32 hsh[N],buf[N],vl[N][2];
inline void calc(int u,int fa) {
sz[u]=1; for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; calc(v,u),sz[u]+=sz[v];
} R size=0;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; buf[++size]=hsh[v];
} sort(buf+1,buf+size+1);
u32 vl=0; for(R i=1;i<=size;++i) vl=vl*B+buf[i];
hsh[u]=vl?vl*sz[u]:1;
}
inline void getsz(int u,int fa) {
sz[u]=1,mx[u]=0;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; getsz(v,u); sz[u]+=sz[v];
mx[u]=max(mx[u],sz[v]);
} mx[u]=max(mx[u],sum-sz[u]);
}
inline void main() {
g(T); for(R i=1;i<=T;++i) {
sum=g(n[i]); for(R u=1,v;u<=n[i];++u) g(v),v?add(u,v):(void)0;
getsz(1,0); R sz=Inf,tot=0;
for(R u=1;u<=n[i];++u) sz=min(sz,mx[u]);
for(R u=1;u<=n[i];++u) if(mx[u]==sz) calc(u,0),vl[i][tot]=hsh[u],++tot;
if(tot==2&&vl[i][0]>vl[i][1]) swap(vl[i][0],vl[i][1]);
cnt=0,memset(fir,0,sizeof(fir)),memset(nxt,0,sizeof(nxt)),memset(hsh,0,sizeof(hsh));
}
for(R i=1;i<=T;++i) { register bool flg=true;
for(R j=1;j<i;++j) if(n[i]==n[j]&&vl[i][0]==vl[j][0]&&vl[i][1]==vl[j][1]) {
flg=false; printf("%d\n",j); break;
} if(flg) printf("%d\n",i);
}
}
} signed main() {Luitaryi::main(); return 0;}

2019.09.03

66

最新文章

  1. JS中使用MD5加密
  2. [Android Pro] Android开发实践:自定义ViewGroup的onLayout()分析
  3. lucene 分词实现
  4. Struts2:效验器——声明式
  5. redis常用总结
  6. VmWare为Fedora虚拟机扩展磁盘
  7. python学习之路-day12-mysql &amp;&amp; orm
  8. 理解并自定义HttpHandler
  9. Tsung安装与使用
  10. c# equals和==的区别
  11. 如何把rtf、doc文件转换为HTML文件
  12. python-整理-vs2013新建文件编码
  13. incallui中如何查询联系人数据
  14. ⑩bootstrap组件 导航 使用基础案例
  15. 使用scrapy爬取豆瓣上面《战狼2》影评
  16. Hibernate学习(一)创建数据表
  17. io多路复用(一)
  18. @RequestBody和@ModelAttribute注解
  19. JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决
  20. [转载] 修改linux终端用户名的颜色

热门文章

  1. Bean的三种实例化方式
  2. js — 数组Array
  3. 关于typecho发布文章后的错位
  4. const函数返回自身的引用也是常量引用
  5. Lucene全文检索_分词_复杂搜索_中文分词器
  6. Redis过期命令
  7. 【转】Visual Studio Code必备插件
  8. hdu 4501三重包问题
  9. IntelliJ IDEA 最新版 2019.2.4 激活 (持续更新)(含windows和Mac)
  10. Angular 调试