https://vjudge.net/problem/Aizu-2784
看http://www.cnblogs.com/chen9510/p/5929542.html
hash方法,因为每一个一样的node都可以变为一个同样大小的多项式的。。。
map<ULL,LL>mp;
vector<int>g[N];
ULL dp[N];
LL ans;int n;
const ULL b=1000000007;
void dfs(int u,int fa){
dp[u]=1;
for(int i=0;i<g[u].size();++i){
int v=g[u][i];
if(v==fa)continue;
dfs(v,u);
dp[u]+=dp[v]*b;
}
ans+=mp[dp[u]];
mp[dp[u]]++;
}
int main(){
sf("%d",&n);
ans=0;
rep(i,1,n-1){
int u,v;sf("%d%d",&u,&v);
g[u].push_back(v);g[v].push_back(u);
}
dfs(1,1);
cout<<ans<<'\n';
}
本文介绍了一种使用哈希方法解决特定树形结构问题的算法实现。通过将树节点转换为多项式并利用哈希表进行计数,可以高效地统计具有相同结构的子树数量。代码示例展示了递归深度优先搜索(DFS)的应用。
2196

被折叠的 条评论
为什么被折叠?



