CCF GESP 2025年12月认证 C++ 8级
题目描述
猫和老鼠所在的庄园可以视为一张由 $n$ 个点和 $m$ 条带权无向边构成的连通图。结点依次以 $1,2,...,n$ 编号,结点 $i\,(1≤i≤n)$ 有价值为 $c_i$ 的奶酪。在 $m$ 条带权无向边中,第 $i\,(1≤i≤m)$ 条无向边连接结点 $u_i$ 与结点 $v_i$,边权 $w_i$ 表示猫和老鼠通过这条边所需的时间。
猫窝位于结点 $a$,老鼠洞位于结点 $b$。对于老鼠而言,结点 $u$是安全的当且仅当:
- 老鼠能规划一条从结点 $u$ 出发逃往老鼠洞的路径,使得对于路径上任意结点 $x$(包括结点 $u$ 与老鼠洞)都有:猫从猫窝出发到结点 $x$ 的最短时间严格大于老鼠从结点 $u$ 沿这条路径前往结点 $x$ 所需的时间。
老鼠在拿取安全结点的奶酪时不存在被猫抓住的可能,但在拿取不是安全结点的奶酪时则不一定。为了确保万无一失,老鼠决定只拿取安全结点放置的奶酪。请你计算老鼠所能拿到的奶酪价值之和。
输入格式
第一行,两个正整数 $n,m$,分别表示图的结点数与边数。
第二行,两个正整数 $a,b$,分别表示猫窝的结点编号,以及老鼠洞的结点编号。
第三行,$n$ 个正整数 $c_1,c_2,...,c_n$,表示各个结点的奶酪价值。
接下来 $m$ 行中的第 $i$ 行$(1≤i≤m)$包含三个正整数 $u_i,v_i,w_i$,表示图中连接结点 $u_i$ 与结点 $v_i$ 的边,边权为 $w_i$。
输出格式
输出一行,一个整数,表示老鼠所能拿到的奶酪价值之和。
样例说明
样例 1
5 5
1 2
1 2 4 8 16
1 2 4
2 3 3
3 4 1
2 5 2
3 1 8
22
样例 2
6 10
3 4
1 1 1 1 1 1
1 2 6
2 3 3
3 1 4
3 4 5
4 5 8
5 6 2
6 4 1
3 2 4
5 4 4
3 3 6
3
数据范围
对于 40% 的测试点,保证 $1≤n≤500,1≤m≤500$。
对于所有测试点,保证 $1≤n≤10^5,1≤m≤10^5,1≤a,b≤n 且 a≠b,1≤u_i,v_i≤n,1≤w_i≤10^9$。
题目描述
小 A 有一串包含 $n$ 枚宝石的宝石项链,这些宝石按照在项链中的顺序依次以 $1,2,…,n$ 编号,第 $n$ 枚宝石与第 $1$ 枚宝石相邻。项链由 $m$ 种宝石组成,其中第 $i$ 枚宝石种类为 $t_i$。
小 A 想将宝石项链分给他的好朋友们。具体而言,小 A 会将项链划分为若干连续段,并且需要保证每段都包含全部 $m$ 种宝石。请帮小 A 计算在满足条件的前提下,宝石项链最多可以划分为多少段。
输入格式
第一行,两个正整数 $n,m$,分别表示宝石项链中的宝石的数量与种类数。
第二行,$n$ 个正整数 $t_1,t_2,……t_n$,表示每枚宝石的种类。
输出格式
输出一行,一个整数,表示宝石项链最多可以划分的段数。
样例说明
样例 1
6 2
1 2 1 2 1 2
3
样例 2
7 3
3 1 3 1 2 1 2
2
数据范围
对于 40% 的测试点,保证 $2≤n≤1000$。
对于所有测试点,保证 $2≤n≤10^5,2≤m≤n,1≤t_i≤m$,保证 $1,2,...,m$ 均在 $t_1,t_2,...,t_n$ 中出现。