给定一个长为$n$的串,字符集$’a’…’f’$。你可以重排这个串,满足指定$m$个位置上只能放特定的字符,$m$个位置以及字符集会给出,求字典序最小的串
首先看成二分图,把$a,f$字母当作$X$,位置当成$Y$。$|Y|$连向$|X|$的边就是特定字符。
根据完美匹配可以知道,产生了$X$的子集$\leq|Y|$
二分图G中的两部分顶点组成的集合分别为X, Y(假设有$|𝑋|≤|𝑌|$)。G中有一组无公共点的边,一端恰好为组成X的点(也就是存在完美匹配)的充分必要条件是:X中的任意k个点至少与Y中的k个点相邻,即对于X中的一个点集W ,令N(W)为W的所有邻居, 霍尔定理即对于任意W,$|𝑊|≤|𝑁(𝑊)|$
$f[i][s],表示[i,n]$,子集$s$所连的位置有多少。
那么贪心的取,判断是否可以取到由于取完了$ans[i]=j$,则$cnt[j]-1$,这时候判断$f[i+1][s]\geq cnt[j]$。根据定理即可。
比如$a \ 1 \ b$
代码
1 |
|