题目链接:https://www.nowcoder.com/acm/contest/206/A
题意很简单,给你n个球,m个桶。现在每个球最多可以丢到两个桶中的一个,同时规定每个桶中球的平方和为代价。现在希望你找一个方案,使得代价最小。
一开始random_shuffle后回溯在60%左右T掉。。
回溯的时候往一个当前有$x$个球的桶里丢一个球的时候,代价的增幅为$(x+1)^2-x^2$,于是来了灵感。
我们可以把丢球的过程看作节点,每次往一个当前有$x$个球的桶里多丢一个球的时候,意味着代价增加了$(x+1)^2-x^2$,而且这个代价是单调递增的。
我们考虑建图,超级源、汇中间有n个代表球的节点和m个代表桶中球数量的节点:
由源点出发,n个节点代表球,各连接一条,流量为1,费用为0的边。
接着从n个节点向m个节点出发,代表球可以向某两个桶里丢,流量为1,费用为0。
接着由m个桶向汇点连边,每个桶连n条边,流量为1,费用为该桶+1个球后代价的涨幅。由于涨幅是递增的,因此在求最小费用最大流的时候肯定从小到大流。
1 |
|