20201017B组T3 计数题
题目大意
一个有 n n n个点的完全图,每条边的边权是 a i ⊕ a j a_i \oplus a_j ai⊕aj,求最小生成树的边权和方案数
TJ
考虑按照最高位的 0 / 1 0/1 0/1 分成两堆,容易得出两堆点之间有且仅有一条边相连(最优情况下),于是用Trie求出这条边的最小边权和方案数,然后两边递归下去,把所得的最小边权相加,方案数相乘便可。
注意当 t = 0 t=0 t=0(其中 t t t是位数)是,剩下的点(设个数为 x x x)的方案数为 x x − 2 x^{x-2} xx−2。
#include<bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--