Edge Groups(ICPC)
树上计数
考虑如果一个点的亲儿子是偶数个 两两亲儿子配对就好
如果一个点的亲儿子是奇数个 挑一个出来和连上父亲 其余偶数个两两配对
n个两两配对的方案数为 (C(n,2)×C(n-2,2)×...×C(2,2))/((n/2)!)
化简得 (n!)/(2的n/2次方)×((n/2)!)预处理阶乘就好
#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int mod=998244353;
const int maxn=1e5+5;
int n;
vectorQ[maxn];
ll ans=1;
ll dp[maxn],jc[maxn],vis[maxn],cf[maxn];
ll fast_mi(ll aa, ll bb){
ll res=1;
while(bb){
if(bb&1)res=res*aa%mod;
bb>>=1;
aa=aa*aa%mod;
}
return res;
}
void dfs(int u,int fa);
ll calc(ll x){
return jc[x]*fast_mi(cf[x/2]*jc[x/2]%mod,mod-2)%mod;
}
int main(){
int n;
jc[0]=1;
cf[0]=1;
cin>>n;
for(int i=1;i>a>>b;
Q[a].push_back(b);
Q[b].push_back(a);
}
jc[n]=jc[n-1]*n%mod;
cf[n]=cf[n-1]*2%mod;
dfs(1,1);
for(int i=1;i<=n;i++)
ans=ans*dp[i]%mod;
cout<