#2 MLE求调orz
查看原帖
#2 MLE求调orz
1049148
ouyaqu楼主2024/10/7 01:58
```c
#include <bits/stdc++.h>
using namespace std;


int dp[6005][2], w[6005], a[6005][6005], f[6005], root;
int n;

void dfs(int r)
{
	if (dp[r][1] > 0)
		return;

	dp[r][1] = w[r];
	for (int i = 1; i <= n; i++)
	{
		if (a[r][i])
		{
			dfs(i);
			dp[r][0] += max(dp[i][1], dp[i][0]);
			dp[r][1] += dp[i][0];
		}
	}


}




int main() {
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> w[i];
	int x, y;
	for (int i = 1; i <= n - 1; i++)
	{
		cin >> x >> y;
		a[y][x] = 1;
		f[x] = y;
	}
	root = y;
	while (f[root] != 0)
	{
		root = f[root];
	}

	dfs(root);
	cout << max(dp[root][0], dp[root][1]);

	return 0;
}
2024/10/7 01:58
加载中...