1220 生命之樹

2022-09-21 17:27:15 字數 1473 閱讀 3456

給一棵樹和每個結點的權值,求聯通塊的最大權值和

第一行乙個整數 \(n\) 表示這棵樹有 \(n\) 個節點。

第二行 \(n\) 個整數,依次表示每個節點的權值。

接下來 \(n−1\) 行,每行 \(2\) 個整數 \(u,v\),表示存在一條 \(u\) 到 \(v\) 的邊。

由於這是一棵樹,所以是不存在環的。

樹的節點編號從 \(1\) 到 \(n\)。

輸出一行乙個數,表示聯通塊的最大權值和。

資料範圍

\(1≤n≤10^5,\)

每個節點的評分的絕對值均不超過 \(10^6\)。

輸入樣例:

5

1 -2 -3 4 5

4 23 1

1 22 5

輸出樣例:
8
dfs

直接用dfs求出包含某個節點的子樹的最大權值和,權值和為負數取 \(0\) 即可

當然也可以認為是一種樹形dp,即:

// problem: 生命之樹

// contest: acwing

// url:

// memory limit: 256 mb

// time limit: 1000 ms

// // powered by cp editor (

// %%%skyqwq

#include //#define int long long

#define help

#define pb push_back

#define fi first

#define se second

#define mkp make_pair

using namespace std;

typedef long long ll;

typedef pairpii;

typedef pairpll;

template bool chkmax(t &x, t y)

template bool chkmin(t &x, t y)

template void inline read(t &x)

while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();

x *= f;

}const int n=100005;

vectoradj[n];

int n,w[n];

ll res=-1e18;

ll dfs(int x,int fa)

res=max(res,t);

return t;

}int main()

dfs(1,0);

cout

}

AcWing 1220 生命之樹

題目鏈結 在x森林裡,上帝建立了生命之樹。他給每棵樹的每個節點 葉子也稱為乙個節點 上,都標了乙個整數,代表這個點的和諧值。上帝要在這棵樹內選出乙個非空節點集 s,使得對於 s 中的任意兩個點 a,b,都存在乙個點列 使得這個點列中的每個點都是 s 裡面的元素,且序列中相鄰兩個點間有一條邊相連。在這...

JZOJ5363 生命之樹

給定一棵 n 個節點的樹,1號節點為根每個節點上面有乙個由小寫字母組成的字串si 和乙個權值va li,兩個字串si sj 組合起來的收益為lc p si sj 定義d ecu 為 u 子樹內所有的點,那麼以 u為根的子樹的總收益為 an su i de cu j dec u,ivali xorv ...

289 生命遊戲

給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態 1 即為活細胞 live 或 0 即為死細胞 dead 每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞...