社区讨论

40分求大佬指出问题

P12343[蓝桥杯 2025 省 AB/Python B 第二场] 树上寻宝参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mmexkwuw
此快照首次捕获于
2026/03/06 21:29
4 天前
此快照最后确认于
2026/03/08 14:45
前天
查看原帖
CPP
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e6 + 10;
int head[N];
int vis[N];
int tot;
int maxx;
long long worth;
struct edge {
	int to;
	int next;
	int w;
}e[N];
int W[N];
void addedge(int u, int v,int w) {
	e[tot].to = v;
	e[tot].w = w;
	e[tot].next = head[u];
	head[u] = tot;
	tot++;
}
void dfs(int root,int dep) {
	if (dep >=maxx)return;
	for (int i = head[root]; i != -1; i=e[i].next) {
		int v = e[i].to;
		if (!vis[v] && dep < maxx) {
			worth += e[i].w;
			vis[v] = 1;
			dfs(v, dep + 1);
		}
	}
	return;
}
int main() {
	memset(head, -1, sizeof(head));
	memset(vis, 0, sizeof(vis));
	int n;
	cin >> n;
	int step;
	cin >> step;
	maxx = 2 * step;
	for (int i = 0; i < n; i++) {
		cin >> W[i];
	}
	for (int i = 1; i < n; i++) {
		int x, y;
		cin >> x >> y;
		addedge(x, y, W[i]);
		addedge(y, x, W[i]);
	}
	vis[1] = 1;
	dfs(1, 0);
	cout << worth+W[0];
}

回复

0 条回复,欢迎继续交流。

正在加载回复...