MLE on #2.
下载数据发现 #2 的数据是链,不知道为什么 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;
}