Aizu
来源:互联网 发布:淘宝网热卖怎么加入 编辑:程序博客网 时间:2024/05/22 19:27
题意:
给你一棵树,问有多少对相似的子树(每层深度拥有相同数量的节点)。
思路:
将每棵树通过hash算法映射出一个值,下面这个公式用到了BKDRhash算法
Hash(T)= (
相当于将一棵树转化成一个p进制的整数。
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+7;const ll p = 137;const ll mod = 1e9+7;int n;ll Hash[maxn];vector<int> arr[maxn];map<ll,ll> mp;map<ll,ll>::iterator it;void dfs(int u){ Hash[u] = 1; int len = arr[u].size(); for(int i = 0;i<len;i++) { int v = arr[u][i]; dfs(v); Hash[u] = (Hash[u]+Hash[v]*p)%mod; } mp[Hash[u]]++;}int main(){ scanf("%d",&n); for(int i = 0;i<n-1;i++) { int u,v; scanf("%d%d",&u,&v); arr[u].push_back(v); } dfs(1); ll ans = 0; for(it = mp.begin();it!=mp.end();it++) { ans += (it->second-1)*it->second/2; } printf("%lld\n",ans); return 0;}
阅读全文
1 0
- Aizu
- Aizu
- Aizu
- Aizu
- Aizu
- Aizu
- Aizu
- Aizu
- Aizu
- Aizu
- AIZU 1259
- Aizu 2222
- Aizu 2223
- Aizu 2224
- Aizu - 0015
- Aizu 0024
- Aizu 0005
- Aizu 2305
- LVS+Keepalived
- IOS 实现简单抽屉效果
- MySQL学习之使用视图
- 圆角边框和背景
- C++文件操作——MFC打开文件与保存文件
- Aizu
- Ubuntu14.04安装CPU版SSD(Single Shot MultiBox Detector)/Caffe版本(三)
- P1443 马的遍历
- MOOC清华《面向对象程序设计》第4章:delete禁止自动类型转换实验
- 初学python-3
- 在macOS上安装OpenCV开发环境
- corejava_异常-断言
- C语言中的位运算符
- 在Spring下集成ActiveMQ