题意:懒得写了,比较麻烦。
强行嵌套的题真没意思。。
开始我看见数据范围n=50,第一问求什么完全子图,我以为是个搜索减枝,然后第二问那个dp我想了想,列了几个方程发现不是很对,然后又没有部分分,我就弃疗了。。
其实想一想应该是想得出来的,主要是考试的时候写了第二题的很麻烦的做法,被折腾得没精力了,就没怎么想。。第一问其实很简单,二分图完全子图是P类的。我们求出这个二分图的补图,补图中的边就表示这两个点不能被同时选,于是就是最大点独立集了。由于要选出尽量多的男生,我们用最小割来做带权独立集即可,在S割中的男生和在T割中的女生都要选。
然后就是个DP。设f[a,b]表示a个男生b个女生中连k条边的方案(注意k是常数),可以看做在a*b的矩阵里放k个点,使得每行每列都有点。f[a,b]=C(a*b,k)-Σf[i,j]*C(a,i)*C(b,j)。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define erp(i,a,b)