我们可以把点分成三个集合:$A,B,C$,其中 $A$ 是一个团,$B$ 中每个点和 $A$ 中 $1$ 到 $|A|-1$ 个点有边(内部没有边),$C$ 中是孤立点。
枚举一个集合中 $A$ 集合的点数,设为 $i$,那么答案一定可以取到 $i(|A|-i)+\sum_{x\in B} \min\{deg(x),\max\{i,|A|-i\}\}$。
接下来考虑计数,$C$ 中每个点直接乘上 $2$。
枚举 $i$,设分成的集合是 $X,Y$。如果 $w_i$ 最大的点和最小的点在不同的集合,假设是 $X$ 和 $Y$,对于 $B$ 中的每个点 $x$,如果 $deg(x)<|X|$,那么说明 $w_i$ 最大的若干个点应该属于 $X$,否则说明 $w_i$ 最小的若干个点应该属于 $Y$。剩下的点就是组合数。
如果 $w_i$ 最大的点和最小的点在相同的集合也是类似的情况,最后方案数还是一个组合数。
有很多细节要分类讨论,例如 $B$ 为空、$B$ 中度数都很小、$i=|A|-i$ 等等。
时间复杂度 $O(n^2)$。