【9001】Internet消息发布
Time Limit: 1 second
Memory Limit: 256 MB
问题描述
设Internet上有N个站点,通常从一个站点发送消息给其他N-1个站点,需依次发送N-1次。这样从一个站点发布消息传遍N个站点时
,可能要较长时间。而当一个站点发布消息给另一个站点后,已获得消息的这两个站点就可以 发布消息给另外两个站点,此后
就有四个站点可以同时发布消息,这种发布消息方法应该会缩短消息传遍N个站点的时间。
请您编一个程序,设从每一个站点都可以向其他N-1个站点同时发送消息,编程求出从第一个站点开始发布消息传遍N个站点的
最短时间。
Input
由文件data.in输入数据,文件的第一行是Internet上的站点数N(1<=N<=100),第二行起是邻接矩阵严格的下三角部分
,各行是整数或字符X。A(I, J)表示从I站点发送消息给J站点所需要的时间。假设网络是无方向的,故A(I, J)=A(J, I),当A
(I, J)=-1时,表示从站点I不能直接向站点J发送消息;A(I,I)=0表示没有必要自己给自己送消息(1<=I<=N),严格的下三
角阵表示如下:
A(2, 1)
A(3, 1), A(3, 2)
A(4, 1), A(4, 2), A(4, 3)
┇
A(N, 1), A(N, 2)……A(N, N-1)
Output
从屏幕上输出,输出只有一行,它是一个非负整数,若为0表示无解,非0表示合符题意的最小整数。
Sample Input
5
50
30 5
100 20 50
10 -1 -1 10
Sample Output
35
【题解】
算出站点1到各个站点的最短路径。然后找到站点1到各个站点的最短距离的最大值。
这个最大值就是所求的最短时间。
题目说的意思就是说有n-1个人在站点1,然后分别走到其他n-1个站点,那最短的时间就是最晚到的那个人,只要每个人都走最优的路线,那么最晚的那个人所用的时间就是最短的了。
用dijkstra算法。
【代码】
#include <cstdio>
#include <cstring> int n,t[110][110],a[110][110],mt[110],ans = 0;
bool bo[110]; void input_data()
{
memset(a,0,sizeof(a));
memset(bo,true,sizeof(bo));
scanf("%d",&n);
for (int i = 1;i <= n;i++)
mt[i] = 2100000000;
for (int i = 2;i <= n;i++) //输入数据
for (int j = 1;j <=i-1;j++)
{
scanf("%d",&t[i][j]);
if (t[i][j]!=-1) //如果不等于-1,则表示i和j是连通的
{
a[i][++a[i][0]] = j;//记录i的出度信息
a[j][++a[j][0]] = i;//记录j的出度信息
t[j][i] = t[i][j];//全值是双向的。
}
}
} void get_ans()
{
mt[1] = 0;
for (int i = 1;i <= n;i++) //进行dijkstra算法。
{
int k = 0,min_n = 2100000000;
for (int j = 1;j <= n;j++) //先找到mt最小的值
if (bo[j] && (mt[j] < min_n)) //同时还要是之前没找过的位置
min_n = mt[j],k = j;
if (k == 0) break;//如果没有找到这样的位置 那么就不再找,结束就好
bo[k] = false;
for (int j = 1;j <= a[k][0];j++) //根据其出度信息,更新到出度的最优解。
if (mt[a[k][j]] > mt[k] + t[k][a[k][j]])
mt[a[k][j]] = mt[k] + t[k][a[k][j]];
}
for (int i = 1;i <= n;i++) //找到最优解中的最大值。这个值就是答案。
if (mt[i]!=2100000000 && mt[i] > ans)
ans = mt[i];
} void output_ans()
{
printf("%d\n",ans);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}
【9001】Internet消息发布的更多相关文章
- redis 的消息发布订阅
redis支持pub/sub功能(可以用于消息服务器),这个功能类似mq,这里做一个简单的介绍 Pub/Sub Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在R ...
- SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- vue_组件间通信:自定义事件、消息发布与订阅、槽
自定义事件 只能用于 子组件 向 父组件 发送数据 可以取代函数类型的 props 在父组件: 给子组件@add-todo-event="addTodo" 在子组件: 相关方法中, ...
- Redis的消息发布和订阅
Redis的消息发布和订阅 Author:SimpleWu GitHub-redis 什么是消息发布和订阅? Redis 发布订阅(pub/sub)是一种进程间的消息通信模式: 发送者(pub)发送消 ...
- redis:消息发布与订阅频道
1. 发布与订阅频道 消息发布与订阅像收音机与广播台的关系 1.1. publish channel message 发布频道 语法:publish channel message 作用:发布频道消息 ...
- springboot2.X 集成redis+消息发布订阅
需求场景:分布式项目中,每个子项目有各自的 user 数据库, 在综合管理系统中存放这所有用户信息, 为了保持综合管理系统用户的完整性, 子系统添加用户后将用户信息以json格式保存至redis,然后 ...
- ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)
一.创建发布器节点 1 节点功能: 不断的在ROS网络中广播消息 2 创建节点 (1)打开工作空间目录 cd ~/catkin_ws/src/beginner_tutorials 创建一个发布器节点( ...
- ROS 消息发布器和订阅器Publisher, Subscriber
博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...
- redis实现消息发布/订阅
redis实现简单的消息发布/订阅模式. 消息订阅者: package org.common.component; import org.slf4j.Logger; import org.slf4j. ...
随机推荐
- Leetcode892.Surface Area of 3D Shapes三维形体的表面积
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上. 返回结果形体的总表面积. 示例 1: ...
- IE下的双外边距浮动bug
最常见且最容易发现的额一个bug是IE 6和最低版本中的双外边距浮动bug.这个bug是任何浮动元素上的外边距加倍. 上面代码中,div盒子向左边浮动,设置的margin-left的值是10px.在c ...
- 【JZOJ4792】【NOIP2016提高A组模拟9.21】整除
题目描述 麦克雷有一个1~n的排列,他想知道对于一些区间,有多少对区间内的数(x,y),满足x能被y整除. 输入 第一行包含2个正整数n,m.表示有n个数,m个询问. 接下来一行包含n个正整数,表示麦 ...
- Directx11 教程(2) 基本的windows应用程序框架(2)
原文:Directx11 教程(2) 基本的windows应用程序框架(2) 在本教程中,我们把前面一个教程的代码,进行封装.把初始化函数,Run函数,窗口回调函数,ShutdownWind ...
- 使用multiprocessing的问题总结
Python2中的multiprocessing模块,规避了GIL(Global Interpreter Lock)带来的多线程无法实际并发的缺点,设计了几乎与threading模块一模一样的API, ...
- Linux上编辑然后执行一段脚本的机制
简要分析下刚开始提出的第二个问题, 因为没看代码,所以只是简单流程 1. 在bash里打开vim编辑文件并保存退出: bash进程fork子进程, 然后调用exec装入vim程序,wait这个子进程v ...
- Ubuntu里node命令出错,找不到
ubuntu里用sudo apt-get install nodejs安装Node.js后, 发现terminals里运行node命令(比如node –-version)时候会有No such fil ...
- 关于element-ui的弹框问题
el-dialog获取数据. el-dialog加载到页面中的时候,其实已经加载好了.只是默认隐藏了. 第一次点击的时候弹出,为何拿不到数据?之后再次操作就一点问题都没有了.
- oracle函数 to_single_byte(c1)
[功能]将字符串中的全角转化为半角 [参数]c1,字符型 [返回]字符串 [示例] SQL> select to_multi_byte('高A') text from dual; test -- ...
- async/await运用-前端表单弹窗验证同步书写方式(React)
在前端项目中,我们经常会碰到这样的场景: 当前我们有一个表单需要填写,在完成表单填写后经过校验之后会弹出短信或者其他形式验证码,进行补充校验,然后一起提交给接口. 场景如下图: 当前为创建操作,编辑操 ...