wqy的C题

wqy的C题

毒瘤!

题意:

你有一张 $ n $ 个点 $ m $ 条边的无向图。
你想在这张图上添加 $ n $ 条有向边,每一条有向边连接两个点 $ u,v $ ,你需要保证 $ u,v $ 在原图上不联通,且每一个点刚好作为一条有向边的起始点和另一条有向边的终止点。
注意一个点到自身也算联通。

解法:

1.10pts 观察到有一个点是完全图,所以直接输出 $ 0 $ 就有10分
2.40pts 当 $ m=0 $ 的时候,考虑错排公式的推导过程,这个图就可以转化成一个错排经典模型
3.50pts = 40pts + 10pts。
4.100pts 考虑容斥。

当连通块大小不是1的时候,我们设 $ f_{i,j} = \sum^{size_i}{k=0}f{i-1,j-k}g_{size_i,k} $
其中 $ g_{i,j} $ 表示大小为 $ i $ 的连通块中已定 $ j $ 个点的方案数。
然后考虑 $ g_{i,j} $ 怎么算。首先选 $ j $ 个点,然后还要是的它们连向自己所在的连通块,所以 $ g_{i,j}=C_i^ji(i-1) \cdots (i-j+1) $ 。前面的组合数表示选出若干个点,后面是排列求方案数。
我们可以 $ O(1) $ 的预处理阶乘 ,那么 $ g_{i,j} = C_i^j \frac{i!}{(i-j)!}$
时间复杂度是 $ n \sum size_i = O(n^2) $ 。

CODE:

//待填坑

猜你喜欢

转载自www.cnblogs.com/Repulser/p/11409463.html