NOIP2014 Day1 T2 聯合權值

2021-07-05 02:17:43 字數 1300 閱讀 4556

【noip2014 day1 t2】聯合權值

time limit:10000ms  memory limit:131072k

total submit:57 accepted:30 

case time limit:1000ms

description

input

output

sample input

5

1 22 3

3 44 5

1 5 2 3 10

sample output

20 74

hint

source

感謝nodgd放上題目

看了題解才能得全分。以中間點討論

答案一:記錄n個中間點的鄰近的第一大數和第二大數,更新答案

答案二:sum記錄距離中間點為一的權值和, powersum記錄距離中間點為一的取值平方和

中間點周圍的權值和=w[1]*(sum-w[1])+w[2]*(sum-w[2])+......+w[n]*(sum-w[n])

=(w[1]+w[2]+......w[n])*sum-(w[1]*w[1]+w[2]*w[2]+......w[n]*w[n])

=sum*sum-powersum

#includeusing namespace std;

#define maxn 200009

int u[maxn], v[maxn];

long long w[maxn], first[maxn], second[maxn], sum[maxn], powersum[maxn];

void add(int mid, long long w)

inline void _read(int& d)

for(d=0;t<='9'&&t>='0';t=getchar()) d=d*10+t-'0';

if(f) d=-d;

}inline void _read2(long long& d)

for(d=0;t<='9'&&t>='0';t=getchar()) d=d*10+t-'0';

if(f) d=-d;

}int main()

printf("%i64d %i64d", ans1, ans2);

}

NOIP 2014 day 1 T2 聯合權值

第一眼看起來很複雜。所以我想了個對鏈 和樹不同情況都分別處理的演算法。orz。複雜度太高最後4組t了。所以。轉換思路。聯合權值 w i w j i,j距離為2.也就是i,j中間間隔了乙個節點,所以我們在遍歷這個中間節點的時候處理。題目求最大和總和,先考慮最大,我們只需要對節點u維護乙個 max1,m...

NOIP 2014 Day2T2 尋找道路

題目中文,不需要我說,直接講思路 題目要求找到一條從起點到終點的路徑,而且保證最短的前提下,每個點的出邊連線的點都要能到達終點,so 第一步,反向建圖,跑一遍bfs,確定能到達終點的所有點 第二步,減掉連著不能到達終點的點的點以及不能到達終點的點,用乙個隨便什麼陣列記錄能用的點就好了 第三步,正常的...

NOIP2014 day2 t2 尋找道路

尋找道路 noip2014 day2 t2 描述在有向圖 g 中,每條邊的長度均為 1,現給定起點和終點,請你在圖中找一條從起點到 終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件 1 的情況下使路徑最短。注意 圖 g 中可能存在重邊和自環,題...