第二点MLE,开了O2RE
查看原帖
第二点MLE,开了O2RE
319003
肉包铁1810楼主2021/3/27 21:48
#include <iostream>
#include <cstring> 
using namespace std;
const int N = 6005;
struct edge {
	int v, next;
} e[N];
int eid, p[N];
int r[N], f[N][2];
int deg[N];
void insert(int u, int v) {
	e[eid].v = v;
	e[eid].next = p[u];
	p[u] = eid++;
}
int n;
void dfs(int u, int fa) {
	f[u][1] = r[u];
	f[u][0] = 0;
	for (int i = p[u]; i != -1; i = e[i].next) {
		int v = e[i].v;
		if (v!=fa) {
			dfs(v, u);
			f[u][1] += f[v][0];
			f[u][0] += max(f[v][0], f[v][1]);
		}
	}
}
int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> r[i];
	}
	memset(p, -1, sizeof(p));
	for (int i = 1; i < n; i++) {
		int l, k;
		cin >> l >> k;
		insert(k, l);
		insert(l, k);
		deg[l]++; 
	}
	int root;
	for (int i = 1; i <= n; i++) {
		if (deg[i] == 0) {
			root = i;
			break;
		}
	}
	dfs(root, -1);
	cout << max(f[root][0], f[root][1]) << endl;
	return 0;
}

求助大佬orz

2021/3/27 21:48
加载中...