【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】

正题

链接 需要纪中OJ账号
有n条木棒,长度为1或根号2,给出每根木棒两头的坐标,和燃烧需要的时间。只能从一个木棒的一头开始点火,求燃烧完所有木棒所需要的最短时间。
From jzoj


输入输出(需要自取)

Input

输入文件第一行为一个正整数N,表示组成图形的木棍数目,后面共有N行,每行5个数: X1 Y1 X2 Y2 T,其中(X1, Y1)和(X2, Y2)分别表示木棍两端的坐标,T表示木棍燃烧时间,是指从木棍的某一端点火燃烧到别一端,燃完所需的时间。

Output

输出文件是一个保留4位小数的实数,表示所有木棍完全燃烧的最少时间。

Sample Input

输入1:

1
0 0 1 1 1

输入2:

5
0 0 0 1 1
1 0 0 1 10
0 0 1 0 1
0 0 1 1 1
2 2 1 1 1

输入3:

3
1 1 1 2 10
1 2 2 2 10
1 1 2 2 50

Sample Output

输出1:

1.0000

解释:

从任一端点火都行,燃烧时间都是1

输出2:

3.2500

解释:

在 (0,0)位置点火木棍 1, 3 和 4 将被点燃,燃烧0.5分钟后,木棍2将被从中间点燃向两端燃烧,再过0.5分钟,木棍1, 3, 4 将被完全燃烧,木棍5 将被点燃并在1分钟后燃烧完 (比木棍2早燃完)。   木棍2从中间向两端燃烧0.5分钟以后,变成两小段,每段的燃烧时间是4.5 分钟。但因为此时两小段木棍的另一端也同时被点燃,燃烧速度变成原来的两倍,还需2.25 分钟的燃烧时间, 所以总时间: 1 + 2.25 = 3.25

输出3:

35.0000

解释:

在 (1,2)位置点火, 木棍(1 1, 1 2) 和(1 2, 2 2)将燃烧 10 分钟。. 最后一根木棍在10分钟后从两端被点燃,燃烧时间为25分钟。


解题思路

木棒可能在中间相连的情况只能在中间,所有加入一下中间点就好了。然后用Floyd最短路算出每个点到其他点的距离,不过所有的点烧完不代表木棒被烧完,所有我们需要枚举点开始烧的点,然后计算每个木棒需要燃烧的时间。


代码

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1601][1601],n,x1,x2,x3,y1,y2,y3,m,wn;
bool mid[501];
double dis[501][501],mins,maxs,lon,ans,e[501][501];
int main()
{for (int i=0;i<=500;i++)for (int j=0;j<=500;j++){dis[i][j]=2147483647;e[i][j]=2147483647;}scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%d%d%d%lf",&x1,&y1,&x2,&y2,&lon);x1+=400;x2+=400;y1+=400;y2+=400;//转换为正数x1*=2;x2*=2;x3=(x1+x2)/2;y1*=2;y2*=2;y3=(y1+y2)/2;//求中间的坐标lon/=2;//分为两条木棍if (!a[x1][y1]){m++;//加入新坐标a[x1][y1]=m;//表示该坐标的点编号}if (!a[x2][y2]){m++;a[x2][y2]=m;}if (!a[x3][y3]){m++;a[x3][y3]=m;mid[m]=true;}dis[a[x1][y1]][a[x3][y3]]=lon;dis[a[x3][y3]][a[x1][y1]]=lon;dis[a[x2][y2]][a[x3][y3]]=lon;dis[a[x3][y3]][a[x2][y2]]=lon;//记录e[a[x1][y1]][a[x3][y3]]=lon;e[a[x3][y3]][a[x1][y1]]=lon;e[a[x2][y2]][a[x3][y3]]=lon;e[a[x3][y3]][a[x2][y2]]=lon;}for (int k=1;k<=m;k++)for (int i=1;i<=m;i++)for (int j=1;j<=m;j++){if (dis[i][k]<2147483647 && dis[k][j]<2147483647)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);//计算最短路}mins=2147483647;for (int k=1;k<=m;k++){if(mid[k]) continue; //排除在中间点ans=0;for (int i=1;i<=m;i++) ans=max(dis[k][i],ans);//取所有点烧完的所需时间for (int i=1;i<=m;i++)for (int j=i+1;j<=m;j++){if(e[i][j]<2147483647)if (dis[k][i]<e[i][j]+dis[k][j] && dis[k][j]<dis[k][i]+dis[i][j])//是否相接{ans=max(ans,max(dis[k][i],dis[k][j])+(e[i][j]-max(dis[k][i],dis[k][j])+min(dis[k][i],dis[k][j]))/2.0);//计算该木棒燃烧时间取最大值}}mins=min(ans,mins);//取最少的时间}printf("%.4lf",mins);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python变量的创建过程(内存地址变化)

​ name “Alex” 原因 python 解释器有自动垃圾回收机制&#xff0c;自动隔一段时间把没有跟变量名关联的内存数据回收。

推荐一份基于Docker的DevOps实战培训教程

01. 基于Docker的DevOps实战培训 微软工具链 基于Azure和Team Foundation Server 微软DevOps工具链是基于Visual Studio 应用生命周期管理&#xff08;VSALM - Visual Studio Application Lifecycle Managemnet&#xff09;的软件管理平台&#xff0c;本动手实验希望通过模拟一…

所有和Java中代理有关的知识点都在这了

转载自 所有和Java中代理有关的知识点都在这了 对于每一个Java开发来说&#xff0c;代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么&#xff0c;到底什么是代理&#xff0c;这么多代理又有什么区别呢。本文就来简要分析一下。 代理技…

神奇!一行代码实现删除某集合下标20-30的元素

大家好&#xff0c;我是雄雄。今天我们还是分享关于集合的内容。假如有这样的需求&#xff0c;已知集合的长度为100&#xff0c;也就是集合中有100个元素&#xff0c;现需要删除索引20-30之间的元素&#xff0c;我们应该怎么实现呢&#xff1f;我们先初始化集合&#xff0c;代码…

ssl初一组周六模拟赛【2018.3.17】

前言 先说一下成绩&#xff1a; 姓名成绩xjq(没错又是他)310hjq200hzb150wyc(本人)130lrz130xxy100lw30zyc缺考 正题 题目1&#xff1a;ssl2574 & jzoj1368 无限序列【斐波那契数列】 刚开始想用分治&#xff0c;结果做不出来&#xff0c;然后想到了更好的方法&#xff…

注意!在subList生成子列表之后,一定不要随便更改原列表

大家好&#xff0c;我是雄雄。前几期我们说过&#xff0c;subList方法是返回原列表的子列表&#xff0c;并且我们还说过&#xff0c;在subList返回的子列表上操作时&#xff0c;会直接影响着原列表&#xff0c;原文在这里&#xff1a;subList?? subString???子列表只是原列…

DotNetCore跨平台~Dockerfile的解释

大叔感觉网上对Dockerfile的说明不是很清楚&#xff0c;或者说怎么去用说的不清楚&#xff0c;在vs2017里我们可以去建立自己的Dockerfile文件&#xff0c;然后你的项目可以被生成一个镜像&#xff0c;把它推到仓库之后&#xff0c;你可以在linux,mac上去run你的项目了&#xf…

当你「ping 一下」的时候,你知道它背后的逻辑吗

转载自 当你「ping 一下」的时候&#xff0c;你知道它背后的逻辑吗 我们在遇到网络不通的情况&#xff0c;大家都知道去 ping 一下&#xff0c;看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗&#xff1f;知道它是如何实现的吗&#xff1f; 一、「ping」命令的作…

POJ1611-嫌犯【图论,并查集】

正题 题目链接&#xff1a; http://poj.org/problem?id1611 大意 有n个人&#xff0c;m个组&#xff0c;有一个流感嫌犯&#xff0c;流感嫌犯会将所在的组的所有人变成流感嫌犯&#xff0c;求流感嫌犯的数量。 解题思路 并查集将各个组合并&#xff0c;然后看看那些人是和…

python的三元运算

a 10 b 5if a > 15 :c a else:c bd a if a > 15 else bd 值1 if 条件A else 值2如果条件A成立&#xff0c;就取左边的 值1&#xff0c;则 取 值2

​凌云KTV点歌系统功能简介

19级青鸟三班 凌云小组指导老师&#xff1a;穆雄雄老师 班主任&#xff1a;王欣欣老师小组成员&#xff1a;组长&#xff1a;李磊 副组长&#xff1a;杨云浩组员&#xff1a;高启航 朱齐 李欣然 高松 张方仪 王浩如 苏荟旭 贾增伟制作周期&#xff1a;2020年9月25日-10月…

REST参考手册

总说接口定义要遵守 RESTful&#xff0c;那么什么是REST呢&#xff0c;今天跟小编一起来了解一下这个规范吧~&#xff01; 原文作者简介&#xff1a; BRIAN SLETTEN是一个关注前沿技术的软件工程师&#xff0c;现居于加州奥本。他的职业生涯横跨了各个行业&#xff0c;包括零售…

漫画:如何用栈实现队列

转载自 漫画&#xff1a;如何用栈实现队列 栈的特点是先入后出&#xff0c;出入元素都是在同一端&#xff08;栈顶&#xff09;&#xff1a; 入栈&#xff1a; 出栈&#xff1a; 队列的特点是先入先出&#xff0c;出入元素是在不同的两端&#xff08;队头和队尾&#xff09;…

POJ2524——宗教(Ubiquitous Religions)【图论,并查集】

正题 题目链接&#xff1a; http://poj.org/problem?id2524 大意 有n个学生&#xff0c;告诉你哪两个学生的宗教相等&#xff0c;求校园里有多少个宗教。 解题思路 并查集链接就好了 代码 #include<cstdio> using namespace std; int n,m,x,y,s,father[50001],t; i…

深入理解python的元组本身不可变性

元组本身不可修改&#xff0c; 如果包含可修改的数据类型&#xff0c; 那被包含的数据类型可以修改。

SQ小组KTV点歌系统简介

19级青鸟三班 SQ小组指导老师&#xff1a;穆雄雄老师 班主任&#xff1a;王欣欣老师小组成员:组长:王世泽 副组长:张坤鹏 组员:渠德春 徐龙翥 泮迎国 程至婷 樊永奇 杜坤凯 李含笑 吴俊衫1项目整体运行视频&#xff1a;KTV前端主页点歌系统主页进入主页面后左边第一个是演唱…

什么是ABTest

转载自 什么是ABTest 在互联网公司的业务发展过程中&#xff0c;用户增长是永恒的主题&#xff0c;因为没有增长也就没有发展&#xff0c;所以在业务发展的早期产品迭代速度往往是越快越好&#xff0c;总之一句话&#xff1a;“怎么快怎么来”&#xff0c;至于系统建设得是否可…

Quartz.net基于数据库的任务调度管理(Only.Jobs)

一 前言&#xff1a; 各大调度组件优缺点在这就不讨论了&#xff0c;使用Quartz.net是因为它可以执行秒级任务。 Only.Jobs 项目通过将各Job存储在数据库中&#xff0c;启动一个专门的Job管理任务来循环调度各Job的的调度情况。 项目分为 Web管理系统 、服务运行端 、数据…

畅想小组KTV点歌系统简介

19级青鸟三班畅想小组指导老师&#xff1a;穆雄雄老师班主任&#xff1a;王欣欣老师小组成员:组长:毛帅龙 副组长:扈明旺组员:张俊豪 靖相民 袁康凯 魏子凯 李明义 魏婉莹 谢润祺 项目整体运行视频&#xff1a;1主页面功能&#xff1a;可以根据用户所需要的页面进行显示和隐藏…