Luogu4926 倍杀测量者(二分答案+差分约束)
容易想到二分答案。问题变为判断是否所有条件都被满足,可以发现这是很多变量间的相对关系,取个log之后就是经典的差分约束模型了。特殊的地方在于某些人的分数已被给定,从每个人开始跑一遍最短路判断一下是否能满足关系即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 1010
const double eps=1E-;
double l,r,ans,d[N],a[N];
int n,m,k,p[N],q[N],cnt[N],t;
bool f[N],isget[N];
struct data{int to,nxt;double len;
}edge[N<<];
struct flag{int op,x,y,z;
}Q[N];
void addedge(int x,int y,double z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}
int inc(int &x){x++;if (x>n+) x-=n+;return x;}
bool spfa(int k)
{
memset(f,,sizeof(f));
for (int i=;i<=n;i++) d[i]=;d[k]=;
memset(cnt,,sizeof(cnt));
int head=,tail=;q[]=k;
do
{
int x=q[inc(head)];f[x]=;
for (int i=p[x];i;i=edge[i].nxt)
if (d[x]+edge[i].len<d[edge[i].to])
{
d[edge[i].to]=d[x]+edge[i].len;
if (!f[edge[i].to])
{
q[inc(tail)]=edge[i].to,f[edge[i].to]=;
cnt[edge[i].to]++;if (cnt[edge[i].to]==n) return ;
}
}
}while (head!=tail);
if (isget[k])
for (int i=;i<=n;i++)
if (isget[i]&&d[i]<a[i]-a[k]) return ;
return ;
}
bool check(double T)
{
t=;memset(p,,sizeof(p));
for (int i=;i<=m;i++)
if (Q[i].op==)
{
if (Q[i].z>T) addedge(Q[i].x,Q[i].y,-log(Q[i].z-T));
}
else addedge(Q[i].x,Q[i].y,log(Q[i].z+T));
for (int i=;i<=n;i++)
if (!spfa(i)) return ;
return ;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read(),k=read();
for (int i=;i<=m;i++)
Q[i].op=read(),Q[i].x=read(),Q[i].y=read(),Q[i].z=read();
l=eps,r=-eps;ans=-;
for (int i=;i<=k;i++)
{
int x=read(),y=read();
a[x]=log(y);isget[x]=;
}
while (l<=r)
{
double mid=(l+r)/;
if (check(mid)) ans=mid,l=mid+eps;
else r=mid-eps;
}
if (ans<) cout<<-;
else printf("%.8lf",ans);
return ;
}
Luogu4926 倍杀测量者(二分答案+差分约束)的更多相关文章
- 洛谷P4926 [1007]倍杀测量者(差分约束)
题意 题目链接 Sol 题目中的两个限制条件相当于是 \[A_i \geqslant (K_i - T)B_i\] \[A_i(K_i + T) \geq B_i\] 我们需要让这两个至少有一个不满足 ...
- [NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组
[NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有 ...
- [NOIP2012提高]借教室 题解(二分答案+差分)
[NOIP2012提高&洛谷P1083]借教室 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室 ...
- vijos 运输计划 - 二分答案 - 差分 - Tarjan
Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...
- [CodeForces954G]Castle Defense(二分答案+差分)
Description 题目链接 Solution 二分答案,套一个差分标记即可 每次放弓箭手显然越右边越优 Code #include <cstdio> #include <alg ...
- cogs 2109. [NOIP 2015] 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分
2109. [NOIP 2015] 运输计划 ★★★☆ 输入文件:transport.in 输出文件:transport.out 简单对比时间限制:3 s 内存限制:256 MB [题 ...
- codevs 1183 泥泞的道路 (二分+SPFA+差分约束)
/* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简 ...
- POJ1275 Cashier Employment 二分、差分约束
传送门 题意太长 为了叙述方便,将题意中的$0$点看作$1$点,$23$点看做$24$点 考虑二分答案(其实从小到大枚举也是可以的) 设$x_i$是我们选的雇员第$i$小时开始工作的人数,$s_i$是 ...
- luogu1083 [NOIp2012]借教室 (二分答案+差分)
先二分一个答案x,然后通过差分来看有没有不满足的 #include<bits/stdc++.h> #define pa pair<int,int> #define lowb(x ...
随机推荐
- CF833D Red-Black Cobweb
题面 题解 点分治大火题... 设白边数量为$a$,黑边为$b$,则$2min(a,b)\geq max(a,b)$ 即$2a\geq b\;\&\&2b\geq a$ 考虑点分治时如 ...
- 四、Django设置相关
1.全局设置 setttings文件 import os import sys # Build paths inside the project like this: os.path.join(BAS ...
- Lambada表达式的作用
Lambda函数的用处 假设你设计了一个地址簿的类.现在你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能两者结合.要是你为这些情况都写个函数,那么你一定就跪了.所以你应该提 ...
- Unity商店下载的文件保存路径?
Win7系统: C:\Users\系统用户名\AppData\Roaming\Unity\Asset Store MAC:"~/Library/Unity/Asset\ Store" ...
- DB知识点记录
DB知识点记录 分页 SqlServer:ROW_NUMBER () over (ORDER BY ID) AS RN, MySql:limit Oracle:ROWNUM AS RN 数据表的基本结 ...
- 关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
因为msdn中说返回受影响的行数: Executes a Transact-SQL statement against the connection and returns the number of ...
- OpenLDAP备份和恢复
OpenLDAP中数据备份一般分为二种: 1)通过slapcat 指令进行备份 2)通过phpLDAPadmin控制台进行备份 备份方式1: 1)slapcat -v -l openldap-back ...
- 启动sshd时,报“Could not load host key”错
原文发表于cu:2016-05-24 现象:启动sshd服务时,虽看似服务启动成功,但客户端并不能连接上sshd服务器端.如下: [root@aefe8007a17d ~]# /usr/sbin/ss ...
- centos7.2部署docker-17.06.0-ce的bug:Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "process_linux.go:339: container init caused \"\"".
现象: 操作系统:centos 7.2 kernel 3.10.0-327.el7.x86_64 mesos:1.3.0 docker:docker-17.06.0-ce 在做mesos验证时,通过m ...
- TP框架代码学习 学习记录 3.2.3
文件:think.class.php PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数.regis ...