90 pts 求助
查看原帖
90 pts 求助
1125291
ZMQ_Ink6556楼主2024/7/25 16:54

MLE on #22.

下载数据发现 #22 的数据是链,不知道为什么 MLE。

求助

#include<bits/stdc++.h>
using namespace std;
struct p
{
	int a , shang , xtmp;
}a[6005];
int n , l , k , s , memory[6005][2] , xia[6005][6005];
inline int dfs(const int place , const bool xuan)
{
	if(a[place].xtmp == 0)
	{
		if(xuan)
		{
			return a[place].a;
		}
		return 0;
	}
	if(memory[place][xuan] != -1)
	{
		return memory[place][xuan];
	}
	int cnt1 = 0 , cnt2 = 0;
	if(xuan)
	{
		cnt1 = a[place].a;
		for(int i = 1 ; i <= a[place].xtmp ; i++)
		{
			cnt1 += dfs(xia[place][i] , 0);
		}
	}
	for(int i = 1 ; i <= a[place].xtmp ; i++)
	{
		cnt2 += dfs(xia[place][i] , 1);
	}
	memory[place][xuan] = max(cnt1 , cnt2);
	return memory[place][xuan];
}
int main()
{
	ios::sync_with_stdio(0);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for(int i = 1 ; i <= n ; i++)
	{
		cin >> a[i].a;
	}
	for(int i = 1 ; i < n ; i++)
	{
		cin >> l >> k;
		a[l].shang = k;
		a[k].xtmp++;
		xia[k][a[k].xtmp] = l;
	}
	for(int i = 1 ; i <= n ; i++)
	{
		if(!a[i].shang)
		{
			s = i;
			break;
		}
	}
	for(int i = 1 ; i <= n ; i++)
	{
		memory[i][0] = memory[i][1] = -1;
	}
	cout << dfs(s , 1);
	return 0;
}

记录

2024/7/25 16:54
加载中...