“一切都会好起来的。”|

zplqwq

园龄:3年10个月粉丝:25关注:14

2021-09-23 20:44阅读: 101评论: 1推荐: 0

题解 P4926 [1007]倍杀测量者

啊不是,这题精度也太..好过了。

这题其实挺简单的,只要想好怎么建边,跑SPFA即可。

首先题目给出以下不等式:

  • sa>sb×(kiT)

  • sa×(ki+T)>sb

这一看!欸咋那么像差分约束呢。

那么第一个问题,怎么连边。

我不是很会跑乘法,所以我把它转换成 log 跑加法。

对于第一个式子,我们可以转换成:log2(sai)+log2(sbi+log2(kit)

对于第二个式子,我们可以转换成:log2(sai)>log2(sbi)log2(ki+t)

然后加边就出来了。

因为这题对精度要求很低,所以我们可以直接连。

每次记录 k 的值,然后对于 t 分类讨论。

for(int i=0;i<=n;i++)
{
add(n+1,i,0,3);
}
for(int i=1,opt,a,b;i<=s;i++)
{
cin>>opt>>a>>b>>x;
add(b,a,x,opt);
if(opt==1)
{
r=min(r,x);
}
}
for(int i=1,c;i<=t;i++)
{
c=read();
x=read();
add(0,c,log2(x),3);
add(c,0,-log2(x),3);
}

无解的话就是在 t=0 且上面那个式子还有解。

后面 SPFA 操作就很套路了。

至于求最大的值,二分答案一下就好了。

如果需要的话可以私信我要完整版代码,但感觉没什么好讲的。

本文作者:zplqwq

本文链接:https://www.cnblogs.com/zplqwq/p/15327349.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   zplqwq  阅读(101)  评论(1编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示