求助!TLE 3个点QWQ
查看原帖
求助!TLE 3个点QWQ
401504
Taro2020楼主2022/4/10 20:39
#include<bits/stdc++.h>
using namespace std;

vector <int> g[19000];
int n,a[19000],f[19000],book[19000];

void input()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> a[i];
    }
    for(int i = 1;i <= n - 1;i++)
    {
        int start,end;
        cin >> start >> end;
        g[start].push_back(end);
        g[end].push_back(start);
    }
}

int dfs(int x)
{
    if(f[x] != 0)
    {
        return f[x];
    }
    f[x] = a[x];
    book[x] = 1;

    for(int i = 1;i <= g[x].size();i++)
    {
        
        int ux = g[x][i - 1];
        if(book[ux] == 0)
        {
            f[x] = max(f[x], f[x] + dfs(ux));
        }
    }
    return f[x];
    book[x] = 0;
}

int ans = -2147483646;

void work()
{
    for(int i = 1;i <= n;i++)
    {
        memset(f, 0, sizeof(f));
        memset(book, 0, sizeof(f));
        ans = max(ans, dfs(i));
    }
    cout << ans;
}

int main()
{
    input();
    work();
}
2022/4/10 20:39
加载中...