其實就是乙個隨機化路徑壓縮,乙個啟發式合併。
#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...