求助节点带权树的直径
  • 板块学术版
  • 楼主PassName
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/17 20:46
  • 上次更新2023/10/27 11:07:44
查看原帖
求助节点带权树的直径
524911
PassName楼主2022/9/17 20:46

RT

自己造了组样例,但是T掉了。。。

样例输入

7
502 1 100 50 3 4 5
1 2
1 3
1 4
2 5
2 6
5 7

样例输出

652

代码

#include <bits/stdc++.h>

#define rint register int
#define endl '\n'

using namespace std;

const int N = 2e5 + 5;
const int M = 4e5 + 5;
const int inf = 0x3f3f3f3f;

int idx, h[N], e[M], ne[M];
int d[N], w[N];
int ans = -inf;

void add(int a, int b)
{
    e[++idx] = b, ne[idx] = a, h[a] = idx;
}

void dfs(int x, int fa)
{
    d[x] = w[x];
    for (rint i = h[x]; i; i = ne[i])
    {
        int y = e[i];
        if (y == fa)
        {
            continue;
        }
        dfs(y, x);
        ans = max(ans, d[x] + d[y]);
        d[x] = max(d[x], d[y] + w[x]);
    }
    ans = max(ans, d[x]);
}

int main()
{
    int n;
    cin >> n;

    for (rint i = 1; i <= n; i++)
    {
        cin >> w[i];
    }

    for (rint i = 1; i < n; i++)
    {
        int a, b;
        cin >> a >> b;
        add(a, b);
        add(b, a);
    }

    dfs(1, -1);

    cout << ans << endl;

    return 0;
}
2022/9/17 20:46
加载中...