NOIP 演算法總結

2021-08-07 01:48:47 字數 2440 閱讀 3537

先貼一張圖

(來自 啊哈磊的專欄)

最短路(1)floyd

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

for(int i = 1; i

<= n; i++)

for(int j = 1; j

<= n; j++)

a[i]

[j] = a[i]

[k] + a[k]

[j];

(2)堆優化 dijkstra

用 priority_queue 做堆,對於每次彈出的點

標記訪問

對於所有能訪問到的點

鬆弛若未訪問,壓入堆中

(3)spfa

用 queue 做佇列,對於每次彈出的點

消除標記

對於所有能訪問的點

鬆弛若未標記,則標記,進入佇列

最小生成樹

(1)kruskal

並查集初始化

邊權排序

如果邊上兩點不在同一集合內

合併兩點

將邊加入最小生成樹

(2)prim

//定義集合 a b

任選 a 中乙個節點,並加入 b

刪除該節點

選乙個在所有連線 a 和 b 權值最小的邊

將兩個節點連線

邊數++

將 a 中節點刪除並加入到 b 中.

若邊數為n-1

完成最小生成樹

否則 繼續選擇

強連通分量

tarjan

對於 dfs 每次到的節點

初始化 dfn[x] = low[x] = ++dfs_clock

把節點壓入棧中

對於所有能訪問到的節點

如果 dfn 為 0(未dfs到)

dfs 該節點

更新 low[x] = min(low[x], low[該節點])

若不為 0 且 不在棧中

low[x] = min(low[x], dfn[該節點])

如果 low[x] == dfn[x]

彈出棧中元素,直到彈出的元素等於x

則彈出的元素屬於乙個強連通分量

一言不合就sort數學&數論 知識總結

【本人很懶】深搜

void dfs(/*當前狀態*/)

for(int i = a; i <= b; i++)

/*恢復當前狀態*/

}return ;

}//by zrt

優化:

最優化剪枝

可行性剪枝

記憶化搜尋

改變搜尋順序

優化搜尋策略

廣搜
void bfs() 

}q.pop();

}return ;

}

優化:

判重:hash、二叉搜尋樹

雙向廣搜

啟發式搜尋

二分 改寫成a*

倒推
f[n] = 初值

for(k = n+1; k >= 1; k--)//階段

for(i; ; )//狀態

for(j; ; )//決策

f[k] = opt

print f[1]

順推
f[1] = 初值

for(k = 2; k <= n; k++)//階段

for(i; ; )//狀態

for(j; ; )//決策

f[k] = opt

print f[n]

二分法

二叉樹 & 二叉搜尋樹

並查集線段樹 & 樹狀陣列字串演算法總結

kmp

manacher

最小表示法

. .

.

概率與期望

並不全是noip考點

1、網路流

2、計算幾何

3、fft

4、lca

5、2-sat

6、單純形法

7、ac自動機..

.未完待續 參考

遠航之曲

川漢唐啊哈磊

NOIP考點總結

一發noip考點的總結。noip考綱總結 noip考前經驗談 首先來一張圖,很直觀 截止到2012年資料 下面是收集的一些,我改了一下 紅色加粗表示特別重要,必須掌握 綠色加粗表示最好掌握,可能性不是很大,但是某些可以提高程式效率 高精度 a.加法 b.減法 c.乘法 應該只會有高精乘單精 d.高精...

noip模擬總結

先講講今天的比賽,t1 看著很水,在草稿紙上畫了一下,發現其實並不簡單,於是先去打第二題,最後半個小時實在是一點頭緒也沒有,打了個狀壓dp 70分 暴力分真多 t2 把樣例畫出來模擬一下就想到了,套路題,就是暴力有點難打,自信不對拍 還好沒掛 t3 又是乙個套路題,可惡的博弈,坑了我半天,最後還是想...

noip模擬總結

先講講今天的比賽,t1 看著很水,在草稿紙上畫了一下,發現其實並不簡單,於是先去打第二題,最後半個小時實在是一點頭緒也沒有,打了個狀壓dp 70分 暴力分真多 t2 把樣例畫出來模擬一下就想到了,套路題,就是暴力有點難打,自信不對拍 還好沒掛 t3 又是乙個套路題,可惡的博弈,坑了我半天,最後還是想...