BZOJ 4337: BJOI2015 树的同构|Hash
2016-02-13 17:21
369 查看
此题三战三卒……!!
![](https://img-blog.csdn.net/20160213171631494)
一卒:没有考虑连边的顺序。
二卒:用排序解决了连边的顺序,然后用重心似乎搞不了……
三卒:考虑到rp问题,换了换hash的数..三卒!
扔了重心终于A掉了
可以用括号序列,然后hash,不过我hash的姿势有点怪怪的
一卒:没有考虑连边的顺序。
二卒:用排序解决了连边的顺序,然后用重心似乎搞不了……
三卒:考虑到rp问题,换了换hash的数..三卒!
扔了重心终于A掉了
可以用括号序列,然后hash,不过我hash的姿势有点怪怪的
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<vector> #include<queue> #include<set> #include<map> #include<iostream> #include<algorithm> #include<ctime> #define ll unsigned long long using namespace std; int sc() { int i=0; char c=getchar(); while(c>'9'||c<'0')c=getchar(); while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i; } ll ans[55][55]; int head[55],lst[555],nxt[555]; int size[55],sum[55],Ans[55]; int tot,n,m,mn; void insert(int x,int y) { lst[++tot]=y; nxt[tot]=head[x]; head[x]=tot; } ll hash(int x,int f) { ll q[55],ans='(';int top=0; for(int i=head[x];i;i=nxt[i]) if(lst[i]!=f) q[++top]=hash(lst[i],x); sort(q+1,q+top+1); for(int i=1;i<=top;i++) ans=ans*233+q[i]; return ans*233+')'; } int main() { int Q=sc(); for(int i=1;i<=Q;i++) { memset(head,0,sizeof(head)); tot=0; n=sc(); for(int j=1;j<=n;j++) { int x=sc(); if(x)insert(x,j),insert(j,x); } for(int j=1;j<=n;j++) ans[i][j]=hash(j,0); sort(ans[i]+1,ans[i]+n+1); for(int j=1;j<=i;j++) { int k; for(k=1;k<=n;k++) if(ans[i][k]!=ans[j][k]) break; if(k>n){printf("%d\n",j);break;} } } return 0; }
相关文章推荐
- c语言实现hashmap(转载)
- Ruby中Hash的11个问题解答
- Ruby简明教程之数组和Hash介绍
- 在C#中生成与PHP一样的MD5 Hash Code的方法
- js中hash和ico的关联分析
- Javascript SHA-1:Secure Hash Algorithm
- 理解php Hash函数,增强密码安全
- PHP利用hash冲突漏洞进行DDoS攻击的方法分析
- PowerShell中定义哈希散列(Hash)和调用例子
- Redis String 类型和 Hash 类型学习笔记与总结
- php操作redis中的hash和zset类型数据的方法和代码例子
- Perl 哈希Hash用法之入门教程
- perl哈希hash的常见用法介绍
- php自定义hash函数实例
- php对文件进行hash运算的方法
- php常用hash加密函数
- PHP Hash算法:Times33算法代码实例
- php的hash算法介绍
- memcache一致性hash的php实现方法
- Mysql中的Btree与Hash索引比较