2个不幸的消息

《新宿事件》无缘内地,原因是太暴力,限制级场面太多,只在香港国际电影节放映III级版本,并且仅映三场,之后港公映适当删减后的IIB级版本。

 

奈特利不演《加勒比海盗4》,因为新一集《加勒比海盗》并未顾及两个老角色伊丽莎白·斯万和威尔·特纳。

 

 

 

 

POJ1125——股票经纪人的小道消息问题 时间限制:1000ms,空间限制:10000K。 问题描述:众所周知,股票经纪人对谣言会反应过度。你已经签约开发一种在股票经 纪人中传播虚假信息的方法,以便为你的雇主提供股票市场的战术优势。为了达到最大效 果,你必须以最快的方式传播谣言。 不幸的是,股票经纪人只信任来自他们“可信来源”的信息,这意味着你必须在传播 谣言时考虑他们的联系人的结构。 特定的股票经纪人需要一定的时间才能将谣言传递给他 的每个同事。你的任务是编写一个程序,告诉你选择哪个股票经纪人作为谣言的起点,以及谣言传播到股票经纪人社区所需的时间。 该持续时间是指最后一个人接收信息所需的时 间。 输入格式:你的程序将为不同的股票经纪人输入数据。每组都以一条包含股票经纪人 数量 n 的行开头,接下来每行一个股票经纪人,其中包含与之联系的人数,这些人是谁, 以及他们将消息传递给每个人所花费的时间。每个股票经纪人行的格式如下:该行以联系 人数量(m)开头,后跟 n 对整数,每个联系人一对。每一对首先列出一个指代联系人的 号码(例如 1 表示该组中的第一个号码),然后是用于将消息传递给该人的时间(以分钟 为单位)。没有特殊的标点符号或间距规则。 每个人的编号为 1 到股票经纪人的数量。传递消息所需的时间将介于 1 到 10 分钟(包 括 1 和 10 分钟)之间,联系人数量将介于 0 到股票经纪人的数量减 1 之间。股票经纪人的 数量范围从 1 到 100,输入由一组包含 0 个股票经纪人终止。 输出格式:对于每组数据,你的程序必须输出一行,其中包含导致最快消息传输的人, 以及在你将该消息传递给此人之后最后一个人收到任何给定消息的时间,以整数分钟为单 位。你的程序可能会收到一个排除某些人的连接网络,即某些人可能无法访问。如果你的 程序检测到这样一个破碎的网络,只需输出消息“disjoint”。注意,将消息从 A 传递给 B 所花费的时间不一定与将其从 B 传递给 A 所花费的时间相同。 输入样例: 3 2 2 4 3 5 2 1 2 3 6 2 1 2 2 2 5 3 4 4 2 8 5 3 1 5 8 4 1 6 4 10 2 7 5 2 0 2 2 5 1 5 0 输出样例: 3 2 3 10 要求:①提供详细的算法设计思路,思路分为输入、处理和输出三个部分。②生成解题的Java代码。允许一次输入多个测试用例,并一次性输出多个输入对应的所有结果。③解题代码和算法设计思路分开显示。算法设计思路请使用文本格式而非Markdown格式显示.
最新发布
12-13
算法设计思路 输入部分: 程序读取多组测试数据,每组以股票经纪人数量n开头。当n为0时输入结束。对于每个经纪人i(编号从1到n),读取一行数据:第一个数m表示他能直接联系的经纪人数量,随后是m对整数,每对包含一个目标经纪人编号和将消息传递给该经纪人所需的时间(分钟)。构建一个有向加权图,用邻接矩阵或邻接表存储。由于n≤100,使用二维数组graph[i][j]表示从i到j的传递时间,若无法直达则设为无穷大。注意图是有向的,即A能传给B不代表B能传给A。 处理部分: 本题要求找出一个起始经纪人,使得从他开始传播谣言后,所有其他经纪人都能收到消息,并且最后一个收到消息的人所用的时间最短。如果存在某个经纪人无法从起点到达,则整个网络不连通。因此需要对每个可能的起始点进行最短路径计算,推荐使用Floyd-Warshall算法或对每个节点运行Dijkstra算法。考虑到n较小(≤100),采用Floyd-Warshall简洁:先初始化距离矩阵,然后新所有点对之间的最短传播时间。之后枚举每个经纪人作为起点,检查是否所有其他节点都能到达(距离不是无穷大),并记录从该起点出发到达所有节点的最大时间(即最后一个人收到消息的时间)。在所有可达的起点中选择所需总时间最少的那个。若没有任何一个起点能让所有经纪人收到消息,则输出“disjoint”。 输出部分: 对每组数据输出一行结果:如果存在有效起点,输出最佳起点编号和对应的最短传播完成时间;否则输出“disjoint”。每组输出仅一行,严格按照格式输出,不添加额外空格或换行(除正常换行外)。程序持续处理直到输入n为0为止。 ```java import java.util.*; public class Main { private static final int INF = Integer.MAX_VALUE / 2; // 防止溢出 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int caseNum = 1; while (true) { int n = sc.nextInt(); if (n == 0) break; // 初始化图:graph[i][j] 表示从i到j的最短时间 int[][] graph = new int[n + 1][n + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { graph[i][j] = (i == j) ? 0 : INF; } } // 读入每个股票经纪人的联系信息 for (int i = 1; i <= n; i++) { int m = sc.nextInt(); for (int j = 0; j < m; j++) { int target = sc.nextInt(); int time = sc.nextInt(); graph[i][target] = time; } } // Floyd-Warshall 算法求所有点对最短路径 for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (graph[i][k] < INF && graph[k][j] < INF) { graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]); } } } } // 枚举起始点,找最小传播时间 int bestBroker = -1; int minTime = Integer.MAX_VALUE; for (int start = 1; start <= n; start++) { int maxTime = 0; boolean reachable = true; // 检查从start能否到达所有其他节点 for (int end = 1; end <= n; end++) { if (start != end) { if (graph[start][end] >= INF) { reachable = false; break; } maxTime = Math.max(maxTime, graph[start][end]); } } if (reachable && maxTime < minTime) { minTime = maxTime; bestBroker = start; } } // 输出结果 if (bestBroker == -1) { System.out.println("disjoint"); } else { System.out.println(bestBroker + " " + minTime); } } sc.close(); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值