複習向 NOIP板子整理

2022-03-13 09:22:44 字數 2883 閱讀 7160

其實就是乙個隨機化路徑壓縮,乙個啟發式合併。

#include #include #include #include #define maxn 200010

using namespace std ;

int n, m, a, b, c, f[maxn] ;

namespace _heuristic

inline void merge(int x, int y)

void solve2()

else merge(b, c) ;

} }}namespace _compress

void solve1()

else

} }}int main()

其實就是埃氏篩和線性篩啦~

關於埃氏篩複雜度的證明,大概就是每個數會被他所有的質因子都篩一遍,而質因子個數似乎是\(\ln \ln n\)個的,所以複雜度為\(o(n\log \log n)\)的(漸進意義下好像不區分對數底數)。

#include #include #include #include using namespace std ;

int n, m ;

namespace es

} void solve1()

#undef maxn

}namespace euler

} }void solve2()

}int main()

\(spfa + slf\)+亂搞

其實此處的\(slf\)亂搞是借鑑的知乎上的一種方式,即在樸素的\(slf\)下,再新增乙個交換隊頭隊尾的操作,具體來說:

但其實呢,無論如何\(spfa\)的原理就是乙個佇列而已,我們做的一切無非就是讓他看起來更像乙個優先佇列而不是\(fifo\)的佇列。所以……該被卡還是會被卡。

#include #include #include #define r register 

#define maxn 200010

#define to(i) e[i].to

#define inf 2147483647

using namespace std ;

deque q ;

struct edgee[maxn] ; int head[maxn], cnt ;

int n, m, s, dist[maxn] ; bool vis[maxn] ;

inline int qr()

inline void add(int u, int v, int w)

inline void spfa()

else if (dist[f] > dist[to(i)])

q.push_front(to(i)) ;

else q.push_back(to(i)) ; }}

} }} int main()

\(heap + dijkstra\)

#include #include #include #define r register 

#define maxn 200010

#define to(i) e[i].to

#define inf 2147483647

using namespace std ;

deque q ;

struct edgee[maxn] ; int head[maxn], cnt ;

int n, m, s, dist[maxn] ; bool vis[maxn] ;

inline int qr()

inline void add(int u, int v, int w)

inline void spfa()

else if (dist[f] > dist[to(i)])

q.push_front(to(i)) ;

else q.push_back(to(i)) ; }}

} }} int main()

主要是成員函式的寫法,是從\(rqy\)的**裡抄來的。

#include #include #include #define ll long long

#define mod 1000000007

using namespace std ;

ll n, k ;

struct matrix

void reset()

matrix friend operator *(const matrix&a, const matrix &b)

matrix friend operator +(const matrix&a, const matrix &b)

} qwq, unit ;

inline matrix expow(matrix t, ll p)

return ans ;

}int main()

雖然好像板子比較好寫的樣子……不過我還是覺得沒準\(dinic\)更好一些\(233\).

#include #include #include #define r register 

#define maxn 2000100

#define to(k) e[k].to

using namespace std ;

struct edgee[maxn] ; int head[maxn], ans, cnt ;

int n, m, ew, a, b, used[maxn] ; bool vis[maxn] ;

inline void add(int u, int v)

bool path(int u)

} }return 0 ;

}int main()

掃瞄線 板子向

原本想虐虐藍橋尋找一下快感,結果隨意選了一道題就是二分 掃瞄線 於是就滾回去補掃秒線了 我太菜了 下面以hdu 1542做例子寫的乙個板子 掃瞄線的思想很簡單放個圖應該就不會忘了 掃瞄線所構造的線段樹葉子結點管轄的是乙個區間,為了避免以後腦子犯渾,我還是線段樹的構造也寫一下吧 把y座標離散 int ...

noip題目複習

dp 揹包 奇怪的線段覆蓋 優化 ln函式的結論 二分 搜尋 圖的搜尋樹 倒序求解 結論題 曼哈頓距離 曼哈頓距離 x 線段樹 mod mod x 線段樹 字串 矩陣 x 期望 貪心 單調棧 manacher 線性篩 for i 2 i n i phi prime j i phi i prime j...

noip複習 快速冪

最普通的二進位制拆分 define ll long long ll qpow ll a,ll n,ll p 底數變大了,直接做 a a 會爆longlong,需要用類似快速冪的方法做乘法 define ll long long ll mul ll a,ll n,ll p ll qpow ll a,l...