CCF GESP 2025年3月认证 C++ 6级

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

题目描述

小 A 有一棵 $n$ 个结点的树,这些结点依次以 $1,2,\cdots,n$ 标号。

小 A 想在这棵树上漫步。具体来说,小 A 会从树上的某个结点出发,每一步可以移动到与当前结点相邻的结点,并且小 A 只会在偶数步(可以是零步)后结束漫步。

现在小 A 想知道,对于树上的每个结点,从这个结点出发开始漫步,经过偶数步能结束漫步的结点有多少个(可以经过重复的节点)。

输入格式

第一行,一个正整数 $n$。

接下来 $n-1$ 行,每行两个整数 $u_i,v_i$,表示树上有⼀条连接结点 $u_i$ 和结点 $v_i$ 的边。

输出格式

一行,$n$ 个整数。第 $i$ 个整数表示从结点 $i$ 出发开始漫步,能结束漫步的结点数量。

样例说明

样例 1

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

样例 2

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

数据范围

对于 $40\%$ 的测试点,保证 $1\leq n\leq 10^3$。

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

第 2 题
环线
时间限制:1s 内存限制:512MB

题目描述

小 A 喜欢坐地铁。地铁环线有 $n$ 个车站,依次以 $1,2,\cdots,n$ 标号。车站 $i\ (1\leq i<n)$ 的下一个车站是车站 $i+1$。特殊地,车站 $n$ 的下一个车站是车站 $1$。

小 A 会从某个车站出发,乘坐地铁环线到某个车站结束行程,这意味着小 A 至少会经过一个车站。小 A 不会经过一个车站多次。当小 A 乘坐地铁环线经过车站 $i$ 时,小 A 会获得 $a_i$ 点快乐值。请你安排小 A 的行程,选择出发车站与结束车站,使得获得的快乐值总和最大。

输入格式

第一行,一个正整数 $n$,表示车站的数量。

第二行,$n$ 个整数 $a_1,a_2,...,a_n$,分别表示经过每个车站时获得的快乐值。

输出格式

一行,一个整数,表示小 A 能获得的最大快乐值。

样例说明

样例 1

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

样例 2

输入:
5
-3 4 -5 1 3
输出:
5

数据范围

对于 $20\%$ 的测试点,保证 $1\leq n\leq 200$。

对于 $40\%$ 的测试点,保证 $1\leq n\leq 2000$。

对于所有测试点,保证 $1\leq n\leq 2\times 10^5$,$-10^9\leq a_i\leq 10^9$。

编程题部分已到底了。