专栏文章

题解:P11378 [GESP202412 七级] 燃烧

P11378题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqt8flp
此快照首次捕获于
2025/12/04 10:21
3 个月前
此快照最后确认于
2025/12/04 10:21
3 个月前
查看原文

解题思路

这道题可以把树看做一个图。我们可以从每个点开始, dfs 搜索相邻的节点。对每个点出发搜到的点的个数取最大值。
这道题代码如下:(现在没拿到代码,重写了一份)
CPP
using namespace std;

vector<int> v[100005];
int c[100005], vis[100005], maxn = -1, n;

int dfs(int u) {
	if (vis[u]) return vis[u];
	int cnt = 1;
	for (int i : v[u])
		if (c[i] < c[u])
			cnt += dfs(i);
	vis[u] = cnt;
	return cnt;
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> c[i];
	for (int i = 1; i < n; i++) {
		int a, b;
		cin >> a >> b;
		v[a].push_back(b);
		v[b].push_back(a);
	}
	for (int i = 1; i <= n; i++) {
		maxn = max(maxn, dfs(i));
	}
	cout << maxn;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...