<span>图论专项测试</span>

A. center

分别考虑每一条边。

二分答案,问题转化为判定是否存在可行区间。

然后列式子发现存在三种限制的形态,而其中的一种(含有或运算)并不是一个线性算法能够解决的。

盲猜这种情况并不多见,剪枝暴力$AC$。

个人认为三分的算法是伪的,见数据(不能hack三分算法,但不单谷):

3 3

1 2 1

1 3 1

2 3 1

 

B. escape

考虑一条次短路径,可以表示为$1$->最短路->$a$->不经过最短路边->$b$->最短路->n。

然后发现我们只关注这个次短路大小,并不关注具体是谁。

对于每一个$b$,我们只关注最短的$1$->$a$->$b$。对于每一个$a$是同理的。

而$a!=b$,所以通过二进制分组优化这个暴力的过程,跑多源点多汇点的最短路就可以了。

 

C. chip

一个很神奇的网络流建图,这里写的是$Lrefrain$大神的做法,题解的消圈算法待补。

考虑枚举最终的零件数*$\frac{A}{B}$,显然这个只有$n$种不同的取值。

于是只需要考虑前两个限制,跑出最大的答案,并检测最终答案是否在合法区间内尝试更新答案。

令$h_i$表示第$i$行中C和.的个数,$l_i$表示第i列中C和.的个数。这里设我们枚举的限制为$lim$。

将行、列各$n$个点构造一个二分图,连边$(s,i)$。流量为$h_i$,费用为0。列与$t$连边同理。

对于$map_{i,j}='.'$,连边$(i,j+n)$,流量为1,费用为1。如果流过这条边,花费1费用,代表点$(i,j)$不装零件。

为了$i$行等于$i$列的限制,连边$(i,i+n)$,流量为$lim$,费用为0。流过这条边,不花费费用,代表这些点装上了零件。

跑最小费用最大流,为了保证费用最小,会尽可能的流经0费用边,也就是尽量跑满$lim$的限制。

这条$lim$的流量既限制了每一行的总流量,也限制了每一列的总流量。

为了使得流量最大,每个零件在$lim$已经流满,不能保留的前提下,只好选择通过带费用的边退掉。

考虑最终的结果,如果流量没有流满,显然不能更新,否则在合法的前提下用流量-费用更新答案即可。

全部评论

相关推荐

11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 16:08
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务