Luogu4926 倍杀测量者(二分答案+差分约束)
容易想到二分答案。问题变为判断是否所有条件都被满足,可以发现这是很多变量间的相对关系,取个log之后就是经典的差分约束模型了。特殊的地方在于某些人的分数已被给定,从每个人开始跑一遍最短路判断一下是否能满足关系即可。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 1010 const double eps=1E-6; 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<<2]; 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+1) x-=n+1;return x;} bool spfa(int k) {memset(f,0,sizeof(f));for (int i=1;i<=n;i++) d[i]=10000000;d[k]=0;memset(cnt,0,sizeof(cnt));int head=0,tail=1;q[1]=k;do{int x=q[inc(head)];f[x]=0;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]=1;cnt[edge[i].to]++;if (cnt[edge[i].to]==n) return 0;}}}while (head!=tail);if (isget[k])for (int i=1;i<=n;i++)if (isget[i]&&d[i]<a[i]-a[k]) return 0;return 1; } bool check(double T) {t=0;memset(p,0,sizeof(p));for (int i=1;i<=m;i++)if (Q[i].op==1){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=1;i<=n;i++)if (!spfa(i)) return 1;return 0; } int main() { #ifndef ONLINE_JUDGEfreopen("c.in","r",stdin);freopen("c.out","w",stdout);const char LL[]="%I64d\n"; #elseconst char LL[]="%lld\n"; #endifn=read(),m=read(),k=read();for (int i=1;i<=m;i++)Q[i].op=read(),Q[i].x=read(),Q[i].y=read(),Q[i].z=read();l=eps,r=10-eps;ans=-1;for (int i=1;i<=k;i++){int x=read(),y=read();a[x]=log(y);isget[x]=1;}while (l<=r){double mid=(l+r)/2;if (check(mid)) ans=mid,l=mid+eps;else r=mid-eps;}if (ans<0) cout<<-1;else printf("%.8lf",ans);return 0; }
转载于:https://www.cnblogs.com/Gloid/p/9762749.html
Luogu4926 倍杀测量者(二分答案+差分约束)相关推荐
- [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告
[NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...
- BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 1388 Solved: 860 [Submit][Stat ...
- P2680-运输计划【LCA,树上差分,二分答案】
正题 题目链接:https://www.luogu.org/problemnew/show/P2680 题目大意 一棵带权无根树,给出若干条路径.选择一条边使其边权变为0,要求路径的长度的最大值最小. ...
- 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...
- luogu P2680 运输计划 (二分答案+树上差分)
题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间 ...
- [BZOJ4556][TJOI2016HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1360 Solved: 545 ...
- P2463-[SDOI2008]Sandy的卡片【SA,二分答案】
正题 题目链接:https://www.luogu.com.cn/problem/P2463 题目大意 nnn个长度不同的数字序列,序列的子串相同的定义是该子串相邻的两两差相同. 求公共子串的最长长度 ...
- 第十九章:二分查找和二分答案
二分查找 二分的思想在程序设计中有着广泛的应用,例如,排序算法中的快速排序.归并排序,数据结构中的二叉树.堆.线段树等.二分是一种常用且高效的算法,它的基本用途是在单调序列中进行查找和判定操作. 二分 ...
- 0629-树状数组+二分答案-排列
今天的测试,让我知道自己还有很多很多知识点的掌握不牢,发现自己代码能力很差,思维也不够好,蒟蒻感到深深地难过.但不管怎么样,一切杀不死我的,都会使我变得强大,我不会放弃挣扎的!我相信只要肯钻研,就无论 ...
最新文章
- 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )
- 牛客网题目——替换空格
- c++17(18)-static_cast
- 1cocos2dx扩展库UI控件,CCControlSlider,CCScale9Sprite(九妹图),CCControlSwitch,CCControlButton
- 机器学习基础-一元线性回归-01
- [spark]Spark2.4.6用put写入写入Hbase1.3.1
- tomcat 域名配置、中文域名、别名配置
- 遇到不适当的参数_高清兽用B超机参数调整——“增益”
- ABP教程-打造一个《电话簿项目》-目录-MPA版本-基于ABP1.13版本
- 数码照片尺寸计算秘笈
- 母牛的故事(C语言)
- 非线性优化库NLopt简介
- Android 实现人脸识别检测时的扫描动画效果(二维码扫描动画效果同理)
- Java修仙,法力无边(光速回顾Java基础~)
- Amino-PEG8-alcohol,352439-37-3的化学性质分析
- 从200K/s到2M/s,只差这篇文章——使用ProxyeeDown加速百度云盘下载速度
- 带你了解现在的LED显示屏技术
- python按某列拆分excel表格_把一张Excel表按照固定列分成不同工作薄的小白方法...
- 笔画输入法教程――如何学习笔画输入法
- 设备更新,工作室搬迁
热门文章
- bootstrap-关闭按钮
- 物理Data Guard的日常维护
- Kafka官方文档翻译——简介
- 1. 青蛙跳跳FrogJmp Count minimal number of jumps from position X to Y.
- 使用***搭建javaweb环境
- 当深度学习遇上异构并行计算
- VS2005快捷键大全
- Java程序员从笨鸟到菜鸟之(四十四)细谈struts2(七)数据类型转换详解
- private用法 java_关于android开发中如何正确使用Private Services安全用法及代码示例...
- 词法分析-中文分词技术-正向最大匹配法与逆向最大匹配法