洛谷P1351 聯合權值 樹形dp

2021-09-07 20:16:33 字數 829 閱讀 9104

題目鏈結

一道很簡單的樹形dp,然而被我寫的這麼長

分別記錄下距離為\(1/2\)的點數,權值和,最大值。以及相鄰兒子之間的貢獻。

樹形dp一波。。

#include#define fin(x) 

#define int long long

using namespace std;

const int maxn = 2e5 + 10, mod = 10007;

inline int read()

while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}int n, a[maxn];

vectorv[maxn];

int f[maxn][3], sum[maxn][3], num[maxn][3], dis[maxn], down[maxn], son[maxn];

int add(int x, int y)

int mul(int x, int y)

void dfs(int x, int fa)

}signed main()

for(int i = 1; i <= n; i++) a[i] = read();

dfs(1, 0);

int mx = 0, s = 0;

for(int i = 1; i <= n; i++)

cout << mx << " " << s * 2 % mod;

return 0;}/*

*/

洛谷P1351 聯合權值 樹形dp

給出n 2 e5 n leq2e5 n 2e 5個點,每個點都有乙個權值,每條邊的距離為1 11。求所有點對的權值最大值和權值和。只有兩種情況,1 父親的父親 2 同乙個結點的兩個兒子。第一種情形多帶乙個引數即可維護。第二種情形對於最大值只要維護兒子權值的最大和次大值,對於求和只要維護權值和和權值平...

洛谷P1351 聯合權值

無向連通圖g 有n 個點,n 1 條邊。點從1 到n 依次編號,編號為 i 的點的權值為w i 每條邊的長度均為1 圖上兩點 u v 的距離定義為u 點到v 點的最短距離。對於圖g 上的點對 u,v 若它們的距離為2 則它們之間會產生wu wv 的聯合權值。請問圖g 上所有可產生聯合權值的有序點對中...

P1351 聯合權值 樹形結構

評測記錄 一棵樹,每個點有權值,求兩個距離為2的點使權值之積最大和所以這種點對的權值之積的和。分為兩種情況 1.乙個點是另乙個點的爺節點,這時候在遍歷時儲存爺節點就好了。2.乙個點是另乙個點的兄弟,這時候在乙個點跑兒子的時候計算就好。include include define n 200010 d...