P5043 【模板】树同构([BJOI2015]树的同构)
题意:输出与第i棵树同构的树的最小编号
题解:树hash或者最小表示法
树hash,有根树直接从根结点开始hash即可,对于无根树,由于每棵树的重心最多有两个,所以找到重心当作根节点开始hash即可。
我这里采用的hash方程为
sort(g.begin(),g.end());
for(int i=0;i<g.size();i++){
ac[u]=(ac[u]*base%mod+g[i])%mod;
}
ac[u]=(ac[u]*siz[u])%mod;
完整代码
#include<bits/stdc++.h>
using namespace std;
#define debug(x) cout<<#x<<" is "<<x<<endl;
typedef long long ll;
const int maxn=105;
const int inf=1e9+5;
const int mod=23333;
const int base=233;
struct edge{
int fr;
int to;
int nex;
}e[maxn<<1