原创 [eertree] Codeforces 932G. Palindrome Partition

http://codeforces.com/blog/entry/19193 不是很懂證明 #include <cstdio> #include <iostream> #include <algorithm> #include <

原创 [三元環] BZOJ5206: [Jsoi2017]原力

活那麼久竟然都不會找三元環… https://www.cnblogs.com/jiachinzhao/p/7474761.html 這題的話,顏色相同且兩端點相同的邊權值可以加在一起,然後找三元環就好了 #include <cst

原创 [DP 博弈] Topcoder SRM579 Div1. RockPaperScissors

每一輪的策略跟之前出現過的剪刀石頭布的數量有關 另 fi,a,b,cfi,a,b,c 表示之前出現了 aa 次石頭, bb 次剪刀 ,cc 次布,然後第 ii 個篩子沒用過的概率 DP一下,每一輪獨立算貢獻 // BEG

原创 [DP] Codeforces 936D. World of Tank

令 fi,jfi,j 表示走到 (i,j)(i,j) 時的最大充能 座標離散後 O(n)O(n) DP一下就好了 #include <cstdio> #include <iostream> #include <algorit

原创 [Bluestein's Algorithm DFT] Codechef REALSET. Petya and Sequence

A和B的運算是卷積形式 考慮把A和B DFT D(A)∗D(B)=0,D(B)≠0D(A)∗D(B)=0,D(B)≠0 也就是 A DFT後至少有一個0 求出模某個質數意義下的 2n2n 次單位根 用Bluestein’s Al

原创 [Tarjan] BZOJ5201: [NEERC2017]Connections

tarjan的時候每次每次加入一條返祖邊,都會至少縮去一個點,那麼只要記錄一下遍歷過的邊以及返祖邊就可以了 #include <cstdio> #include <iostream> #include <algorithm> u

原创 [多項式exp] LOJ#556. 「Antileaf's Round」咱們去燒菜吧

學一發分治FFT求多項式exp 感覺這種打法應該比牛頓迭代好打多了 #include <cstdio> #include <iostream> #include <algorithm> using namespace std;

原创 [卷積定理] LOJ#548. 「LibreOJ β Round #7」某少女附中的體育課

設變換矩陣爲 TT 由卷積定理可以知道 對於 TT 的每一行的任意 i,ji,j 滿足 xi×xj=xi opt xjxi×xj=xi opt xj 因爲 AA 滿足循環律 所以存在 c>1c>1 滿足 xci=xixic

原创 [鏈剖 FFT] LOJ#6289. 花朵

樹形DP的轉移是一個卷積的轉移形式 可以先鏈剖,一個點的輕兒子先合併,然後一條重鏈用分治FFT合併 #include <cstdio> #include <iostream> #include <algorithm> #inclu

原创 [容斥] Topcoder SRM555DIV1. MapGuessing

經典題了 枚舉初始狀態的磁頭位置,求出哪些位置可以隨意改動,然後大力容斥 #include <cstdio> #include <iostream> #include <algorithm> #include <vector> #

原创 [線性基 貪心] Topcoder SRM557Div1. XorAndSum

對數列建線性基,求出最大異或值 那麼不在線性基裏面的元素可以把它變成最大異或值 在線性基裏的元素,可以把最高位的元素變成最大值,然後把其他數異或上最大值 #include <cstdio> #include <iostream>

原创 [矩陣乘法優化DP] Topcoder SRM554. TheBrickTowerHardDivOne

dp fi,sfi,s 表示第 ii 層的狀態爲 ss 的方案數 轉移是一個矩乘的形式 用矩乘快速冪優化 #include <cstdio> #include <iostream> #include <algorithm>

原创 [差分約束] Topcoder SRM553 Div1 Hard. YamanoteLine

可行的長度肯定是一個區間 約束條件可以建城差分約束系統,那麼判無解就是判是否有負環 記一下負環上關於總長度的係數,二分就可以了 #include <cstdio> #include <iostream> #include <alg

原创 [最小割] Topcoder SRM558Div1. SurroundingGame

對網格黑白染色 黑的格子和源點連邊,白的格子和匯點連邊 因爲如果保留benefit就必去刪去cost或者所以和他相連的格子的cost 大概是這樣 跑最小割 #include <cstdio> #include <iostrea

原创 [決策單調 分治] LOJ#535. 「LibreOJ Round #6」花火

如果 i<ji<j 且 ai>ajai>aj 那麼 ii 作爲左端點比 jj 優,右端點同理 那麼搞出兩個上升序列,發現右端點遞增的時候左端點也是單調上升的,也就是gjghfd和vector說的具有決策單調 分治就好了 #