P10658 BZOJ2959 长跑

题目背景

某校开展了同学们喜闻乐见的阳光长跑活动。为了能“为祖国健康工作五十年”,同学们纷纷离开寝室,离开教室,离开实验室,到操场参加 $3000$ 米长跑运动。一时间操场上熙熙攘攘,摩肩接踵,盛况空前。

题目描述

为了让同学们更好地监督自己,学校推行了刷卡机制。学校中有 $n$ 个地点,用 $1\sim n$ 的整数表示,每个地点设有若干个刷卡机。 有以下三类事件: 1. 修建了一条连接 $A$ 地点和 $B$ 地点的跑道; 2. $A$ 地点的刷卡机台数变为了 $B$; 3. 进行了一次长跑。问一个同学从 $A$ 地点出发,最后到达 $B$ 地点最多可以刷卡多少次。具体的要求如下: - 当同学到达一个地点时,他可以在这里的每一台刷卡机上都刷卡。但每台刷卡机只能刷卡一次,即使多次到达同一地点也不能多次刷卡。为了安全起见,每条跑道都需要设定一个方向,这条跑道只能按照这个方向单向通行。最多的刷卡次数即为在任意设定跑道方向,按照任意路径从 $A$ 地点到 $B$ 地点能刷卡的最多次数。

输入格式

第一行输入两个正整数 $n,m$; 第二行输入 $n$ 个正整数,第 $i$ 个正整数为第 $i$ 个地点的刷卡机个数。 接下来 $m$ 行,每行包含三个非负整数 $P,A,B$ 代表一个事件,$P$ 为事件类型,$A,B$ 为事件的两个参数。

输出格式

对于每个 $P=3$ 的事件输出一行,包含一个整数,为按照任意路径从 $A$ 地点到 $B$ 地点能刷卡的最多次数。如果不能到达,输出 $-1$。

说明/提示

对于所有数据,$1\leq m\leq 5n$,$1\leq n\leq 1.5\times 10^5$。 保证最初所有地点之间都没有跑道。 每行相邻的两个数之间均用一个空格隔开。 表示地点编号的数均在 $1$ 到 $n$ 之间,每个地点的刷卡机台数始终不超过 $10^4$,$P \in \{1,2,3\}$。