CCF GESP 2024年12月认证 C++ 8级

编程题
共 2 道 每题 25 分 共计 50 分
第 1 题
树上移动
时间限制:1s 内存限制:512MB

题目描述

小杨有一棵包含 $n$ 个节点的树,其中节点的编号从 $1$ 到 $n$,每个节点的颜色要么是白色要么是黑色,小杨可以任意选择节点 $s$ 和节点 $t$ 并从节点 $s$ 出发移动到节点 $t$,移动过程中小杨不能够经过重复节点。

小杨希望自己在至多经过 $k$ 个黑色节点的前提下,经过的总节点数尽可能多,请你帮小杨选择经过最多的节点数是多少。

输入格式

第一行包含两个正整数 $n,k$,代表节点数量和至多经过的黑色节点数。

第二行包含 $n$ 个正整数 $a_1,a_2,\dots,a_n$,代表节点颜色,如果 $a_i=0$,代表节点颜色为白色,如果 $a_i=1$,代表节点颜色为黑色。

之后 $n-1$ 行,每行包含两个正整数 $u_i,v_i$,代表存在一条连接 $u_i$ 和 $v_i$ 的边。

输出格式

输出一个正整数,代表最多经过的节点数。

样例说明

样例 1

输入:
5 1
0 0 1 1 1
1 2
2 3
2 5
1 4
输出:
3

数据范围

对于全部数据,保证有 $1\leq n\leq 1000$,$0\leq k\leq 1000$,$0\leq a_i\leq 1$。

第 2 题
排队
时间限制:1s 内存限制:512MB

题目描述

小杨所在班级共有 $n$ 位同学,依次以 $1,2,\dots,n$ 标号。这 $n$ 位同学想排成一行队伍,其中有些同学之间关系非常好,在队伍里需要排在相邻的位置。具体来说,有 $m$ 对这样的关系($m$ 是一个非负整数)。当 $m\geq 1$ 时,第 $i$ 对关系($1\leq i\leq m$)给出 $a_i,b_i$,表示排队时编号为 $a_i$ 的同学需要排在编号为 $b_i$ 的同学前面,并且两人在队伍中相邻。

现在小杨想知道总共有多少种排队方式。由于答案可能很大,你只需要求出答案对 $10^9+7$ 取模的结果。

输入格式

第一行,两个整数 $n,m$,分别表示同学们的数量与关系数量。

接下来 $m$ 行,每行两个整数 $a_i,b_i$,表示一对关系。

输出格式

一行,一个整数,表示答案对 $10^9+7$ 取模的结果。

样例说明

样例 1

输入:
4 2
1 3
2 4
输出:
2

样例 2

输入:
3 0
输出:
6

样例 3

输入:
3 2
1 2
2 1
输出:
0

数据范围

对于 $20\%$ 的测试数据点,保证 $1\leq n\leq 8$,$0\leq m\leq 10$。

对于另外 $20\%$ 的测试数据点,保证 $1\leq n\leq 10^3$,$0\leq m\leq 1$。

对于所有测试数据点,保证 $1\leq n\leq 2\times 10^5$,$0\leq m\leq 2\times 10^5$。

编程题部分已到底了。