6B12 最优高铁环 0x6B「图论」练习

背景

幻影国建成了当今世界上最先进的高铁,该国高铁分为以下几类:

S---高速光子动力列车---时速1000km/h

G---高速动车---时速500km/h

D---动车组---时速300km/h

T---特快---时速200km/h

K---快速---时速150km/h

该国列车车次标号由上述字母开头,后面跟着一个正整数(<=1000)构成。

描述

由于该国地形起伏不平,各地铁路的适宜运行速度不同。因此该国的每一条行车路线都由K列车次构成。例如:K=5的一条路线为:T120-D135-S1-G12-K856。当某一条路线的末尾车次与另一条路线的开头车次相同时,这两条路线可以连接起来变为一条更长的行车路线。显然若干条路线连接起来有可能构成一个环。

若有3条行车路线分别为:

x1-x2-x3

x3-x4

x4-x5-x1

x1~x5车次的速度分别为v1~v5

定义高铁环的值为(环上各条行车路线速度和)的平均值,即:

[(v1+v2+v3)+(v3+v4)+(v4+v5+v1)]/3.

所有高铁环的值的最大值称为最优高铁环的值。

给出M条行车路线,求最优高铁环的值。

输入格式

第一行为行车路线条数M

接下来M行每行一条行车路线,由若干车次构成,各车次之间用'-'号隔开,车次的标号方式如上所述。

数据保证输入的合法性。

输出格式

最优高铁环的值。四舍五入到最接近的整数。

若不存在这样的环,输出-1.

样例输入

3
T120-D135-S1
S1-G12
G12-K856-T120

样例输出

1283

数据范围与约定

  • 50%的数据:0<M<=1000

    100%的数据,0<M<=50000

    每条行车路线车次个数不超过20,数据保证结果不超过2^31-1。

样例解释

[(200+300+1000)+(1000+500)+(500+150+200)]/3=1283

        </article>

题解

把每段行车路线的起点终点车次看成节点,则给出的就是一些边,然后要求一个01分数规划问题。

二分答案后,找负(正)环即可。

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
rg T data=0,w=1;rg char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-') w=-w;
for(;isdigit(ch);ch=getchar()) data=data*10+ch-'0';
return data*w;
}
template<class T>il T read(rg T&x) {return x=read<T>();}
typedef long long ll; co int N=5e4+1;
co double eps=1e-3;
int n,m,st,ed,t;
int head[N],edge[N],next[N],tot;
double d[N],s[N],leng[N];
bool v[N]; il void add(int x,int y){
edge[++tot]=y,next[tot]=head[x],head[x]=tot;
}
il int f(char ch){
switch(ch){
case 'S': t=0;return 1000;
case 'G': t=1;return 500;
case 'D': t=2;return 300;
case 'T': t=3;return 200;
case 'K': t=4;return 150;
}
return -1;
}
bool dfs(int x){
v[x]=1;
for(int i=head[x];i;i=next[i]){
int y=edge[i];double z=leng[i];
if(d[y]>d[x]+z){
d[y]=d[x]+z;
if(v[y]||dfs(y)) return 1;
}
}
v[x]=0;
return 0;
}
bool pd(double x){
for(int i=1;i<=m;++i) leng[i]=x-s[i];
memset(v,0,sizeof v);
memset(d,0x3f,sizeof d);
for(int i=1;i<N;++i)
if(dfs(i)) return 1;
return 0;
}
int main(){
read(m);
for(int i=1;i<=m;++i){
static char str[150];
scanf("%s",str),n=strlen(str);
int x=0;
bool flag=0;
for(int j=0;j<n;++j){
if(isdigit(str[j])) x=x*10+str[j]-'0';
else if(str[j]=='-'){
if(!flag) st=x+t*10000;
flag=1;
x=0;
}
else s[i]+=f(str[j]);
}
ed=x+t*10000;
add(st,ed);
}
double l=0,r=0x7fffffff,ans=-1; // edit 1: -1
while(r-l>eps){
double mid=(l+r)/2;
if(pd(mid)) l=ans=mid;
else r=mid;
}
printf("%.0lf\n",ans);
return 0;
}

CH6B12 最优高铁环的更多相关文章

  1. linux下改动内核參数进行Tcp性能调优 -- 高并发

    前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核 ...

  2. Linux配置支持高并发TCP连接(socket最大连接数)

    Linux配置支持高并发TCP连接(socket最大连接数) Linux配置支持高并发TCP连接(socket最大连接数)及优化内核参数 2011-08-09 15:20:58|  分类:LNMP&a ...

  3. 【译】调优Apache Kafka集群

    今天带来一篇译文“调优Apache Kafka集群”,里面有一些观点并无太多新颖之处,但总结得还算详细.该文从四个不同的目标出发给出了各自不同的参数配置,值得大家一读~ 原文地址请参考:https:/ ...

  4. 技能篇:linux服务性能问题排查及jvm调优思路

    只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求.最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的.如果你是负责中间件或 ...

  5. 【算法】快速排序-Java版

    说在前面的话 平常码砖的时候,对于一个数组进行排序更多的是起泡排序,起泡排序对于一般不是很长的数组进行操作没什么问题,一旦数组过大,很明显效率低. 而快排是对起泡排序的一种改进,效率明显优高. 快排思 ...

  6. MySQL_第三方数据库引擎_tokudb

    前阵子迁移zabbix到tokudb,整理部分操作笔记到这篇博文.       如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各 ...

  7. 常见性能优化策略的总结 good

    阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后 ...

  8. lesson5-图像检测-小象cv

    R-CNN: 2014,cnn为Alexnet 训练流程: 1)在imagenet上对cnn模型pre-train 2)使用所有ss生成区域对1)进行fine-tune ~softmax改为21维度 ...

  9. 专利事务所信息Python爬取

    数据来源:http://www.acpaa.cn/ 目前事务所的信息没有做反爬限制,还是很容易拿到数据的 没有用html解析工具,直接上正则,结果就是需要处理很多乱七八糟的空格...为了能将日期顺利的 ...

随机推荐

  1. HTTP/HLS/RTMP超级负载测试工具(转)

    这个负载测试工具是网游分享的工具,可以在http://blog.csdn.net/win_lin/article/details/11835011 或者https://github.com/winli ...

  2. LCD驱动程序(二)

    上节我们主要是对fb_info结构体的配置,对fb_info结构体的配置主要分为一下步骤: static int lcd_init(void){ /* 1. 分配一个fb_info */ s3c_lc ...

  3. 使用onepage-scroll全屏滚动插件时的注意事项

    如果项目需要在移动端访问时需要设置responsiveFallback属性,并且在此之前还需要检测浏览器的级别(引入modernizr.js文件) var $responsiveFallback = ...

  4. [JavaScript] Imitate String.Format() in c#

    Definition if (!String.prototype.format) { String.prototype.format = function () { var args = argume ...

  5. jedisLock—redis分布式锁实现(转)

    一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...

  6. 【python】-- 模块、os、sys、time/datetime、random、logging、re

    模块 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...

  7. 【python】-- RabbitMQ RPC模型

    RabbitMQ RPC模型 RPC(remote procedure call)模型说通俗一点就是客户端发一个请求给远程服务端,让它去执行,然后服务端端再把执行的结果再返回给客户端. 1.服务端 i ...

  8. 我的Android进阶之旅------>Android自定义窗口标题实例

    该实例的功能比较简单,但是通过该实例的扩展可以在自定义标题中做出菜单导航等实用的功能,为了实现自定义窗口标题,需要做以下几个步骤: 1.给自定义标题提供一个界面 2.将自定义标题应用给Activity ...

  9. LeetCode:范围求和||【598】

    LeetCode:范围求和||[598] 题目描述 给定一个初始元素全部为 0,大小为 m*n 的矩阵 M 以及在 M 上的一系列更新操作. 操作用二维数组表示,其中的每个操作用一个含有两个正整数 a ...

  10. AbstractQueuedSynchronizer(一)

    应该将子类定义为非公共内部帮助器类,一般并发包类用内部类Sync sync来继承并实现.为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量.事件,等等)提供一个框架.此类的设计目 ...