2093:【22CSPS提高组】数据传输(transmit)

2093:【22CSPS提高组】数据传输(transmit)


时间限制: 3000 ms         内存限制: 524288 KB
提交数: 37     通过数: 6

【题目描述】

小 C 正在设计计算机网络中的路由系统。

测试用的网络总共有 nn 台主机,依次编号为 11 ∼ nn。这 nn 台主机之间由 n−1n−1 根网线连接,第 ii 条网线连接个主机 aiai 和 bibi。保证任意两台主机可以通过有限根网线直接或者间接地相连。受制于信息发送的功率,主机 aa 能够直接将信息传输给主机 bb 当且仅当两个主机在可以通过不超过 kk 根网线直接或者间接的相连。

在计算机网络中,数据的传输往往需要通过若干次转发。假定小 C 需要将数据从主机 aa 传输到主机 b(a≠b)b(a≠b),则其会选择出若干台用于传输的主机 c1c1 = aa, c2c2, · · · , cm−1cm−1, cmcm = bb,并按照如下规则转发:对于所有的 1≤i<m1≤i<m, 主机 cici 将信息直接发送给 ci+1ci+1。

每台主机处理信息都需要一定的时间,第 ii 台主机处理信息需要 vivi 单位的时间。数据在网络中的传输非常迅速,因此传输的时间可以忽略不计。据此,上述传输过程花费的时间为 ∑mi=1vci∑i=1mvci。

现在总共有 qq 次数据发送请求,第 ii 次请求会从主机 sisi 发送数据到主机 titi。小 C想要知道,对于每一次请求至少需要花费多少单位时间才能完成传输。

【输入】

输入的第一行包含三个正整数 nn, QQ, kk,分别表示网络主机个数,请求个数,传输参数。数据保证 1≤n≤2×1051≤n≤2×105, 1≤Q≤2×1051≤Q≤2×105, 1≤k≤31≤k≤3。

输入的第二行包含 nn 个正整数,第 ii 个正整数表示 vivi,保证 1≤vi≤1091≤vi≤109。

接下来 n−1n−1 行,第 ii 行包含两个正整数 aiai, bibi,表示一条连接主机 aiai, bibi 的网线。保证 1≤ai,bi≤n1≤ai,bi≤n。

接下来 QQ 行,第 ii 行包含两个正整数 sisi, titi,表示一次从主机 sisi 发送数据到主机 titi的请求。保证 1≤si1≤si, ti≤nti≤n, si≠tisi≠ti。

【输出】

QQ 行,每行一个正整数,表示第 ii 次请求在传输的时候至少需要花费多少单位的时间。

【输入样例】

7 3 3
1 2 3 4 5 6 7
1 2
1 3
2 4
2 5
3 6
3 7
4 7
5 6
1 2

【输出样例】

12
12
3
在编写消消乐(game)的2023年版本(假设你是指2023年的某项挑战或竞赛中的代码)时,通常会采用一种叫做“匹配消除”的游戏机制。以下是一个简化的Python示例代码框架: ```python import numpy as np class CrosswordGame: def __init__(self, board, tiles): self.board = board self.tiles = tiles self.empty_cells = np.where(board == 0)[0] # 找到空格位置 def make_move(self, row, col): if self.board[row][col] != 0: return False self.board[row][col] = self.tiles.pop(0) # 移动并更新棋盘 # 检查行和列是否能形成连续的同色方块 connected_blocks = self.check_connections(row, col) for block in connected_blocks: self消除_block(block) def check_connections(self, row, col): connections = [] directions = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 上下左右 for dx, dy in directions: r, c = row + dx, col + dy while 0 <= r < len(self.board) and 0 <= c < len(self.board[0]) and self.board[r][c] == self.board[row][col]: connections.append((r, c)) r += dx c += dy return connections def消除_block(self, block): for i, j in block: self.board[i][j] = 0 # 将方块设为空 # 使用示例 board = np.zeros((5, 5)) # 初始化空白棋盘 tiles = [1, 2, 3, 4, 5] # 颜色各异的方块 game = CrosswordGame(board, tiles) while tiles: valid_move = game.make_move(*random.choice(game.empty_cells)) # 随机选择一个空格移动 if not valid_move: print("无法继续消除!") ``` 这个代码只是一个基本框架,实际比赛或项目中的代码可能会更复杂,包括错误处理、用户界面、计分系统等。如果你想了解更多细节或者具体的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值