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. Cassandra数据库Java訪问

    针对的时Cassandra 2.0 数据库 Java本地client訪问Cassandra,首先建立Javaproject,使用Maven进行管理. 引入依赖: <dependency> ...

  2. hdu_1226超级密码(BFS)

    超级密码 Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密码是 ...

  3. Robbery(记忆化搜索)

    Robbery Inspector Robstop is very angry. Last night, a bank has been robbed and the robber has not b ...

  4. 大华NVR设备接分别入宇视摄像机Onvif和RTSP主子码流的方案说明

    需求提要 1.各个内网现场有多种网络摄像机IPC和网络硬盘录像机NVR设备: 2.需要将这些设备统一接入到云端中心平台,进行统一的视频直播和录像回放管理: 3.由于目前IPC设备都属于高清设备,主码流 ...

  5. iOS系统层次架构

    本文转自:http://blog.csdn.net/lxl_815520/article/details/51172917 一,概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS la ...

  6. [note]BSGS & exBSGS

    BSGS (感觉这东西还是要写一下) BSGS主要用于求解形如\(x^k=y\pmod p\)(注意这里p与x互质)这样的方程的最小正整数解的问题 设\(m=\lceil\sqrt p\rceil,k ...

  7. ZOJ - 3537 Cake (凸包+区间DP+最优三角剖分)

    Description You want to hold a party. Here's a polygon-shaped cake on the table. You'd like to cut t ...

  8. linux c编程:系统数据文件和信息

    linux系统相关的文件信息包含在/etc/passwd文件和/etc/group中.每次登录linux系统以及每次执行ls -l命令时都要使用口令文件.这些字段都包含在<pwd.h>中定 ...

  9. python 3 并发编程之多进程 multiprocessing模块

    一 .multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程. ...

  10. ML一(概念学习和一般到特殊序)

    概念学习和一般到特殊序 Concept Learning and the General-To-Specific Ordering 1 简介 1.1 定义 概念学习(Concept Learning) ...