聯合權值 樹上問題2014noip

2022-03-14 07:42:47 字數 691 閱讀 2866

題面

列舉每乙個點作為中間節點

計算出它所有兒子y的權值和sum

每個兒子的要和其他兒子算一遍聯合權值,

所以是\(w[y] * (sum - w[y])\)

最大值的話順便記錄下來就行

#include using namespace std;

const int n = 400000;

int ne[n], ver[n], idx, head[n];

long long ans;

long long sum;

long long a[n];

int n;

long long res;

const int mod = 10007;

void add(int u, int v)

void dfs(int x) else if (a[j] > t2)

} ans = max(ans, (long long)t2* t1 );

for (int i = head[x]; i != -1; i = ne[i])

}int main()

for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);

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

cout 《前乙個答案不用取模,要看清楚題面

NOIP2014 聯合權值

鄰接表儲存樹。列舉每個節點,使之作為中點,先計算出與其相連的所有節點的權值總和l,與其相連的所有節點在該節點處形成的權值 l w w。如果沒有l,直接列舉以此節點為中點的節點對則只能過60 的資料。include include include include include include inc...

NOIP 2014 聯合權值

評測傳送 70分 列舉中間點,然後再兩層迴圈列舉這個點的所有鄰接點,兩兩相乘,加入和中。可能退化為n 2 100分 在70分的基礎上加乙個優化,當我們列舉了中間點,然後再列舉它的鄰接點 j 時,用sum i 表示 i 的所有鄰接點的權值的和,那麼以 i 作為中間點,j這個點對答案的貢獻為 sum i...

(noip2014)聯合權值

題目傳送門sxazr 本題可直接列舉每個點,然後列舉與它相連的兩個點,這兩個點的乘積便是乙個聯合權值 可以記錄下每個點與它相連的點的最大值和次大值,結果就是取最大值和次大值乘積的最大 求和的話,可以記錄下乙個點相連所有點的和s i sum w j s i w j j是與i相連的點 列舉每個點的sum...