noip模擬賽 蒜頭君的樹

2022-05-01 09:33:08 字數 1031 閱讀 3880

分析:這道題問的是樹上整體的答案,當然要從整體上去考慮.

一條邊對答案的貢獻是這條邊一端連線的點的個數*另一端連線的點的個數*邊權,可以用一次dfs來統計答案,之後每次更改操作在原答案的基礎上增減就好了.

千萬不要傻傻地去求lca......事實證明只有10分.問的是任意兩點最短距離之和,樹上兩個點的最短路徑只有一條,所以才要去考慮每條邊的貢獻的.

#include #include 

#include

#include

using

namespace

std;

const

int maxn = 100010

;long

long n, head[maxn], nextt[maxn * 2], tot = 1, to[maxn * 2], w[maxn * 2

], num[maxn], fa[maxn], d[maxn], m;

long

long

ans;

void add(long

long x, long

long y, long

long

z)void dfs(long

long u, long

long

fa) }

num[u]++;

}int

main()

dfs(

1, fa[1

]); printf(

"%lld\n

", ans);

scanf(

"%lld

", &m);

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

return0;

}

noip模擬賽 蒜頭君救人

分析 之前的一道模擬賽題是dp dfs,這道題是dp bfs.我們設f stu i j 為當前狀態為stu,走到 i,j 的答案,考慮怎麼設計stu,每個人的狀態有3種 要麼在原地,要麼被揹著,要麼已經到了終點,那麼用乙個3進製數儲存就可以了.下面考慮怎麼轉移,直接遞推肯定是不對的,dfs也不行,只...

noip模擬賽 蒜頭君的兔子

分析 直接暴力算有30分,像斐波那契那樣推式子算有60分,如果想要得到100分就要用一種數列題的常見優化 矩陣了.當前的兔子數和十年內的兔子數有關,我們需要1個1 11的矩陣,來記錄當前為0歲 1歲 2歲.兔子的數量,同時還需要乙個快速冪矩陣進行計算.由於一年後a 1 a 0 a 2 a 1 a 1...

2018 藍橋杯省賽 A 組模擬賽 蒜頭君下棋

題意 乙個n m的棋盤上讓你放馬,馬和馬之間不能攻擊。問能放多少匹馬。題解 最開始是以為是一道搜尋題。然後一看資料範圍。瞬間懵逼。發現這道題,是個規律題。而且規律錯綜複雜。死活沒有思路。然後我們隊裡的dalao告訴我。你看一眼西洋棋的棋盤你就能明白這道題了。然後我就看了一下棋盤,發現如下規律 當 n...