給一棵樹和每個結點的權值,求聯通塊的最大權值和
第一行乙個整數 \(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 每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞...