题意

题目链接

Sol

题目中的两个限制条件相当于是

\[A_i \geqslant (K_i - T)B_i
\]

\[A_i(K_i + T) \geq B_i
\]

我们需要让这两个至少有一个不满足

直接差分约束建边即可

这里要用到两个trick

  1. 若某个变量有固定取值的时候我们可以构造两个等式\(C_i - 0 \leqslant X, C_i - 0 \geqslant X\)。

  2. 乘法的大小判断可以取log变加法,因为\(y = log(x)\)也是个单调函数

#include<bits/stdc++.h>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
#define LL long long
template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
using namespace std;
const int MAXN = 4001, INF = 1e9;
const double eps = 1e-5;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, K;
struct Edge {
int v, op;
double k, w;
};
vector<Edge> v[MAXN];
void AddEdge(int x, int y, double w, int opt, double k) {
v[x].push_back({y, opt, k, w});
}
double dis[MAXN];
bool vis[MAXN];
int times[MAXN];
bool SPFA(double add) {
queue<int> q; q.push(N + 1);
for(int i = 0; i <= N; i++) dis[i] = -1e18, vis[i] = times[i] = 0;
dis[N + 1] = 0; ++times[N + 1];
while(!q.empty()) {
int p = q.front(); q.pop(); vis[p] = 0;
for(auto &x : v[p]) {
int opt = x.op, to = x.v; double k = x.k, w;
if(opt == 0) w = x.w;
else if(opt == 1) w = log2(k - add);
else w = -log2(k + add);
if(dis[to] < dis[p] + w) {
dis[to] = dis[p] + w;
if(!vis[to]) {
q.push(to);
vis[to] = 1;
++times[to];
if(times[to] >= N + 1) return 0;
}
}
}
}
return 1;
}
signed main() {
N = read(); M = read(); K = read();
double l = 0, r = 10;
for(int i = 1; i <= M; i++) {
int opt = read(), x = read(), y = read(); double k = read();
AddEdge(y, x, 0, opt, k);
if(opt == 1) chmin(r, k);
}
for(int i = 1; i <= K; i++) {
int c = read(); double x = read();
AddEdge(0, c, log2(x), 0, 0);
AddEdge(c, 0, -log2(x), 0, 0);
}
for(int i = 0; i <= N; i++) AddEdge(N + 1, i, 0, 0, 0);
if(SPFA(0)) return puts("-1"), 0;
while(r - l > eps) {
double mid = (r + l) / 2;
if(SPFA(mid)) r = mid;
else l = mid;
}
printf("%lf", l);
return 0;
}

洛谷P4926 [1007]倍杀测量者(差分约束)的更多相关文章

  1. 题解——洛谷P2294 [HNOI2005]狡猾的商人(差分约束)

    裸的差分约束 dfs判断负环,如果有负环就false,否则就是true 注意有多组数据,数组要清空 #include <cstdio> #include <algorithm> ...

  2. 题解—— 洛谷 p1993 小K的农场(差分约束&负环判断)

    看到题就可以想到差分约束 判断负环要用dfs,bfs-spfa会TLE 4个点 bfs-spfa #include <cstdio> #include <algorithm> ...

  3. 洛谷P1993 小K的农场_差分约束_dfs跑SPFA

    Code: #include<cstdio> #include<queue> using namespace std; const int N=10000+233; const ...

  4. 【动态规划】洛谷P1802 5 倍经验日(01背包问题)

    一个洛谷普及-的题目,也是我刚刚入门学习动态规划的练习题. 下面发一下我的思路和代码题解: 我的思路及伪代码: 我的AC图: 接下来上代码: 1 //动态规划 洛谷P1802 五倍经验日 2 #inc ...

  5. 洛谷 1600 (NOIp2016) 天天爱跑步——树上差分

    题目:https://www.luogu.org/problemnew/show/P1600 看TJ:https://blog.csdn.net/clove_unique/article/detail ...

  6. 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)

    洛谷题面传送门 一道挺有意思的题,现场切掉还是挺有成就感的. 首先看到区间操作我们可以想到差分转换,将区间操作转化为差分序列上的一个或两个单点操作,具体来说我们设 \(b_i=a_{i+1}-a_i\ ...

  7. 洛谷 P1802 5倍经验日

    题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却无奈的看着那一些比他等级高的好友,想着能否把他们干掉.干掉能拿不少经验的. 题目描述 现在absi2011拿出了x个迷你装药物 ...

  8. 洛谷——P1802 5倍经验日

    https://www.luogu.org/problem/show?pid=1802#sub 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却无奈的看着那一些比他等级高的好 ...

  9. Luogu4926 倍杀测量者(二分答案+差分约束)

    容易想到二分答案.问题变为判断是否所有条件都被满足,可以发现这是很多变量间的相对关系,取个log之后就是经典的差分约束模型了.特殊的地方在于某些人的分数已被给定,从每个人开始跑一遍最短路判断一下是否能 ...

随机推荐

  1. ubuntu 16.04 下安装NVDIA的库(CUDA+CUDNN)

    立志学习神经网络的同学,为了让它能够跑快一点,估计英伟达的GPU是要折腾一番的. 首先看一下什么是CUDA ? CUDA(Compute Unified Device Architecture),是显 ...

  2. PHP验证码生成及图片处理(GD库)

    GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印. 本章实现了生成图片并绘画各种形状.图片的压缩.中文字符水印及图片水印 ...

  3. Linux 系统下实践 VLAN

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 01 准备环境 ...

  4. Java虚拟机知识汇总

    先膜一波布丁大佬hhh

  5. homebrew 更改镜像,进行成功安装

    在mac系统中,使用homebrew可以很方便的管理包.按照官网的说明执行以下命令时总是报错: /usr/bin/ruby -e "$(curl -fsSL https://raw.gith ...

  6. Ansible系列之roles使用说明

    roles(角色)介绍 ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook.roles能够根据层次型结构自动装载变量文件.tasks以及handlers等.要使用ro ...

  7. Jenkins技巧:如何更新Jenkins到最新版本

    ----------------------------------------------------------------- 原创博文,未经作者允许禁止转载. 博主:疲惫的豆豆 链接:http: ...

  8. Java 容器 & 泛型:五、HashMap 和 TreeMap的自白

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...

  9. 从零开始学 Web 之 Vue.js(六)Vue的组件

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  10. 获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

    今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表 ...