<span>省选模拟40 题解</span>

A. 染色问题

考虑对每条边 $(a,b)$ 附加两种边权 $(x,y)$ 。

对于一种染色方案,当 $col_a=col_b$,边权为 $x$,否则边权为 $y$。

取 $x=1,y=0$,一种染色方案的贡献是所有边权的乘积,那么答案就是对于每种染色方案的贡献的和。

发现这个玩意可以合并。

当 $deg_p=1$,可以直接删掉点 $p$ 并给全局答案乘上 $p$ 所连边的 $(x+(k-1)*y)$。

当 $deg_p=2$,也可以新增一条边连接 $p$ 原来连接的两个点,考虑 $p$ 的颜色即可得到新边的边权。

最后有 $deg_p>=3 \rightarrow 3*n \leq 2*m$ ,因为每次删点和删边是同时进行的,所以仍然有 $m \leq n+5$。

所以可以得到 $n \leq 10,m \leq 15$,然后状压 dp 或者直接用最小表示法搜索都可以了。 

 

B. IOer

答案显然是$\sum \limits_{\sum a_i=n}\prod \limits_{i=1}^m(ui+v)^{a_i}$。

从组合含义的角度,$ui+v$是一个突破口。

这个玩意实际上就是一个固定的 $v$,然后随着 $i$ 的增加 $u$ 不断增加。

所以考虑每当 $i$ 增加的时候,就给可选的种类加个 $u$。

这样的话,就得到了一种构造。

总共球上有 $m$ 种数字 $[0,m)$,其中第 $0$种数字的球有 $u+v$个选择,其他数字的球有 $u$ 种选择。

如果保证每种数字的球第一次出现的位置是递增的(除 $0$ 之外),这样的话在第 $i$ 个数字出现之前可选的种类恰好是 $(i*u+v)$ 种。

所以现在只要再拟合一下次方数。为了方便计算,强制 $[1,m)$ 每种数字小球都必须出现,设第 $i$ 种数字第一次出现为 $p_i$。

因为 $p_i$ 占了 $m-1$ 个位置,所以总共需要选 $n+m-1$ 个小球。

$p_i$ 的出现意味着每次都有 $u$ 种选择,所以还要除掉一个 $u^{m-1}$。

这样的话问题基本就解决了,剩下的是如何保证 $p_i$按顺序出现。发现这个玩意显然每种编号是相同的,所以直接除阶乘就完事了。

只有最后一个条件即要求每种都出现,这个显然二项式反演一下就完事了。

 

C. deadline

容易发现问题是每个时刻任意选择一种边集,然后跑个最大二分图匹配的匹配最小值。

因为二分图中有最大匹配=最小点覆盖,所以问题转化为用最少的点覆盖所有边。

点覆盖无非选择时刻代表的点、工作$0$或工作$1$代表的点。

为了能够选择时刻代表的点,需要把一个时刻拆成两个点处理,然后以流量为$1$的边连接。

所以考虑连边 $(s,work_0)$ ,流量为$1$,割这条边代表选择这个工作代表的点作为覆盖点,这样的话就不需要选择这个工作连接的时刻了,还需要连边 $(work_0,time_{in})$,流量为正无穷表示不可割。

同理需要对称的把 $work_1$ 连在 $time_{out}$ 和 $T$ 之间。

然后发现如果求出了这个图的最小割,割在哪里就是最小的点覆盖,所以问题就解决了。

全部评论

相关推荐

11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务