容易想到二分答案。问题变为判断是否所有条件都被满足,可以发现这是很多变量间的相对关系,取个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 倍杀测量者(二分答案+差分约束)的更多相关文章

  1. 洛谷P4926 [1007]倍杀测量者(差分约束)

    题意 题目链接 Sol 题目中的两个限制条件相当于是 \[A_i \geqslant (K_i - T)B_i\] \[A_i(K_i + T) \geq B_i\] 我们需要让这两个至少有一个不满足 ...

  2. [NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组

    [NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有 ...

  3. [NOIP2012提高]借教室 题解(二分答案+差分)

    [NOIP2012提高&洛谷P1083]借教室 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室 ...

  4. vijos 运输计划 - 二分答案 - 差分 - Tarjan

    Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...

  5. [CodeForces954G]Castle Defense(二分答案+差分)

    Description 题目链接 Solution 二分答案,套一个差分标记即可 每次放弓箭手显然越右边越优 Code #include <cstdio> #include <alg ...

  6. cogs 2109. [NOIP 2015] 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分

    2109. [NOIP 2015] 运输计划 ★★★☆   输入文件:transport.in   输出文件:transport.out   简单对比时间限制:3 s   内存限制:256 MB [题 ...

  7. codevs 1183 泥泞的道路 (二分+SPFA+差分约束)

    /* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简 ...

  8. POJ1275 Cashier Employment 二分、差分约束

    传送门 题意太长 为了叙述方便,将题意中的$0$点看作$1$点,$23$点看做$24$点 考虑二分答案(其实从小到大枚举也是可以的) 设$x_i$是我们选的雇员第$i$小时开始工作的人数,$s_i$是 ...

  9. luogu1083 [NOIp2012]借教室 (二分答案+差分)

    先二分一个答案x,然后通过差分来看有没有不满足的 #include<bits/stdc++.h> #define pa pair<int,int> #define lowb(x ...

随机推荐

  1. java Hibernate UUID代码

    package mypack; import java.io.Serializable; import java.net.InetAddress; /** * 唯一主键生成办法.从Hibernate中 ...

  2. OpenStack入门篇(七)之认证服务Keystone

    一.Keystone的概述 Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等. ...

  3. django使用流程

    1.安装django包 (命令行)>pip install django # conda install django 2.安装成功后,可以新建django项目 1(命令行)>django ...

  4. 【Windows定时关机】windows实现定时关机与取消

    背景:本人昨晚本来打算将电脑设置为晚上12点 30定时关机,结果写成了:12:30,所以就在刚才,我正玩游戏的时候, 电脑弹出提示:“windows将在一分钟内关闭”,我刚开始一脸懵逼,后来打开昨天敲 ...

  5. mysqldump: Got errno 28 on write(mysql)

    使用mysqldump进行数据库备份的时候,出现下面的错误 mysqldump: Got errno 28 on write   上网查了一下:出现这个错误,是因为磁盘的空间不足   再看系统空间使用 ...

  6. unity图形圆形展开

    脚本如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngi ...

  7. Configure,Makefile.am, Makefile.in, Makefile文件

    一 软件安装关于 makefile文件问题 如果拿到的工程文件中,没有Makefile文件,而只有configure.in和Makefile.am文件,我们是不能够直接进行编译的,必须根据config ...

  8. SQL数据类型(SQL Server六个类型使用)

    SQL数据类型是一个属性,它指定任何对象的数据的类型.在SQL中每一列,变量和表达有相关数据类型. 当创建表时,需要使用这些数据类型. 会选择根据表列要求选择一个特定的数据类型. SQL Server ...

  9. 在django中使用django_debug_toolbar

    一.概述 django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能. 包括查看执行的sql语句,db查询次数,request,headers,调试概览等. ...

  10. 微软职位内部推荐-Senior Software Engineer II-Sharepoint

    微软近期Open的职位: SharePoint is a multi-billion dollar enterprise business that has grown from an on-prem ...