題面
列舉每乙個點作為中間節點
計算出它所有兒子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...