然而我並不知道正解是什麼
然而我也不知道它想考什麼
但是貪心加上瞪眼觀察法這這道題很簡潔、很簡單就ac了=w=
這就叫做簡約高階有內涵=w=
由於距離為2,滿足條件的兩點一定會過乙個中心點(他倆中間隔的那個點),我們把每乙個點看成中心點分別處理,只考慮與它直接相連的點
這樣,題目要求的距離為2,顯然是藍的和藍的之間才能滿足要求
由於根據題目,同兩個點是可以算兩遍的,所以我們這種想法是行得通的
然後我們先來找max
max一定是某乙個點為中心點(紅點)時,它所連的點(藍點)中得最大值*次大值,
那麼我們只需要記錄每個點為中心點的最大值和次大值就可以了,然後取max就是我們的最大聯合權值=w=
那麼和呢?
sum=v1*(σ -v1)+v2*(σ-v2)+v3*(σ-v3)+...+v6*(σ-v6)
所以我們只需要計算出每個i所連的所有點的權值和然後在算的時候用 (sum[i]-v)*v 就可以了
那麼對於n個點,(n-1)條邊,我們只需要列舉邊,
然後分別更新這條邊的左右端點的的max1(最大值)、max2(次大值)和sum 就可以了
然後列舉點,去maxn=max(max1[i]*max2[i])
然後再列舉邊,按照我們上面的公式計算左右端點對權值總和summ的貢獻並加到summ中
pascal實現:
type
rec=record
a,b:longint;
end;
const
mo=10007;
var n,x,y,ans,maxn,summ :longint;
i :longint;
v,sum :array[0..200010] of longint;
l :array[0..200010] of rec;
max1,max2 :array[0..200010] of longint;
begin
read(n);
for i:=1 to n-1 do read(l[i].a,l[i].b);
for i:=1 to n do read(v[i]);
//for i:=1 to n-1 do
begin
sum[l[i].a]:=(v[l[i].b]+sum[l[i].a]) mod mo;
if (v[l[i].b]>max1[l[i].a]) then
begin
max2[l[i].a]:=max1[l[i].a];
max1[l[i].a]:=v[l[i].b];
end else
if (v[l[i].b]>max2[l[i].a]) then max2[l[i].a]:=v[l[i].b];
//sum[l[i].b]:=(v[l[i].a]+sum[l[i].b]) mod mo;
if (v[l[i].a]>max1[l[i].b]) then
begin
max2[l[i].b]:=max1[l[i].b];
max1[l[i].b]:=v[l[i].a];
end else
if (v[l[i].a]>max2[l[i].b]) then max2[l[i].b]:=v[l[i].a];
end;
//for i:=1 to n do
if (max1[i]*max2[i]>maxn) then maxn:=max1[i]*max2[i];
//for i:=1 to n-1 do
begin
summ:=((((sum[l[i].b]-v[l[i].a]+mo) mod mo)*v[l[i].a]) mod mo+summ) mod mo;
summ:=((((sum[l[i].a]+mo-v[l[i].b]) mod mo)*v[l[i].b]) mod mo+summ) mod mo;
end;
writeln(maxn,' ',summ);
end.
c語言實現
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...