洛谷P1351 聯合權值 樹形dp

2021-09-27 07:10:11 字數 808 閱讀 4766

給出n≤2

e5

n\leq2e5

n≤2e

5個點,每個點都有乙個權值,每條邊的距離為1

11。求所有點對的權值最大值和權值和。

只有兩種情況,1:父親的父親;2:同乙個結點的兩個兒子。第一種情形多帶乙個引數即可維護。第二種情形對於最大值只要維護兒子權值的最大和次大值,對於求和只要維護權值和和權值平方和。

最大值是不用取模的。

#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const int n=2e5+7;

const int mod=1e4+7;

int w[n];

vectorgo[n];

int ans=0,sum=0;

void dfs(int u,int f,int gf)

if(mxf!=-1&&mxs!=-1) ans=max(ans,mxf*mxs);

if(gf!=-1) ans=max(ans,w[u]*w[gf]),sum=(sum+2*w[u]*w[gf])%mod;

sum=(sum+(s*s-sq)%mod)%mod;

}int main()

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

scanf("%d",&w[i]);

dfs(1,-1,-1);

printf("%d %d\n",ans,sum);

return 0;

}

洛谷P1351 聯合權值 樹形dp

題目鏈結 一道很簡單的樹形dp,然而被我寫的這麼長 分別記錄下距離為 1 2 的點數,權值和,最大值。以及相鄰兒子之間的貢獻。樹形dp一波。include define fin x define int long long using namespace std const int maxn 2e5...

洛谷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...