洛谷 1351 聯合權值

2022-05-25 19:36:17 字數 1823 閱讀 1301

無向連通圖 gg 有 nn 個點,n-1n−1 條邊。點從 11 到 nn 依次編號,編號為 ii 的點的權值為 w_iwi​,每條邊的長度均為 11。圖上兩點 (u, v)(u,v) 的距離定義為 uu 點到 vv 點的最短距離。對於圖 gg 上的點對 (u, v)(u,v),若它們的距離為 22,則它們之間會產生w_v \times w_uwv​×wu​的聯合權值。

請問圖 gg 上所有可產生聯合權值的有序點對中,聯合權值最大的是多少?所有聯合權值之和是多少?

第一行包含 11 個整數 nn。

接下來 n-1n−1 行,每行包含 22 個用空格隔開的正整數 u,vu,v,表示編號為 uu 和編號為 vv 的點之間有邊相連。

最後 11 行,包含 nn 個正整數,每兩個正整數之間用乙個空格隔開,其中第 ii 個整數表示圖 gg 上編號為 ii 的點的權值為 w_iwi​。

輸出共 11 行,包含 22 個整數,之間用乙個空格隔開,依次為圖 gg 上聯合權值的最大值和所有聯合權值之和。由於所有聯合權值之和可能很大,輸出它時要對1000710007取餘。

輸入 #1複製

5  

1 2

2 33 4

4 5

1 5 2 3 10

輸出 #1複製

本例輸入的圖如上所示,距離為2 的有序點對有( 1,3)(1,3) 、( 2,4)(2,4) 、( 3,1)(3,1) 、( 3,5)(3,5)、( 4,2)(4,2) 、( 5,3)(5,3)。

其聯合權值分別為2 、15、2 、20、15、20。其中最大的是20,總和為74。

【資料說明】

對於30%的資料,1 < n \leq 1001

對於60%的資料,1 < n \leq 20001

對於100%的資料,1 < n \leq 200000, 0 < w_i \leq 100001

保證一定存在可產生聯合權值的有序點對。

題解:暴力出奇蹟(由於資料較水,沒有被卡n^2)

#include#include
#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int mod=10007

;const

int n=200002

;struct

nodee[n*2

];int

cnt,head[n];

void add(int x,int

y)int

yc,v,ans;

intn,a[n],x,y;

void work(int

x)

else

if(a[v]>mx2)

ans=(ans+sum*a[v])%mod;

sum=(sum+a[v])%mod;

}yc=max(yc,mx1*mx2);

}int

main()

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

scanf("%d

",&a[i]);

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

printf(

"%d %d

",yc,(ans*2)%mod);

return0;

}

洛谷 1351 聯合權值

一棵樹上距離為2的兩個節點的權值相乘,問max和sum70分 列舉每個節點,它的兩個兒子必定距離為2,相加 取max即可 會t 100分 注意到,乙個節點的兒子中,互相都要乘 根據乘法分配律,我先預處理它兒子的權值和,每個節點x對聯合權值的貢獻為key x sum key x 這樣可以把o n3 的...

洛谷 1351 聯合權值

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

洛谷 1351 聯合權值

題解 每個點維護各個兒子的前字尾最大值 權值和,這樣就可以統計兒子之間相乘的答案。然後每個節點再乘它的祖父的權值去更新答案即可。1 include2 include3 include4 define ll long long 5 define rg register 6 define n 20001...