給定一棵樹,每個點有黑白兩種顏色,定義一條簡單路徑合法當且僅當路徑上所有點黑色與白色數量相等,求有多少非空區間 \([l,r]\) ,使得所有編號 \(\in[l,r]\) 的點形成的本質不同的合法簡單路徑數多於所有編號 \(\notin[l,r]\) 的點形成的本質不同的合法路徑樹。
考慮所有以 \(x\) 為乙個端點的合法簡單路徑數量為 \(f_x\) 。
設兩端點編號分別位於 \([l,r]\) 之內和之外的路徑樹為 \(m\)
那麼 \([l,r]\) 合法當且僅當 \(\sum\limits_ f_x-m>\sum\limits_ f_x-m\)
即 \(\sum\limits_ f_x>\sum\limits_ f_x\) 。
顯然可以輕鬆的點分治求出 \(f_x\) ,然後隨著 \(r\) 的增大, 極大的合法的 \(l\) 顯然單調不減,所以類似滑動視窗一樣的求就可以了。
#include#define debug(x) cerr<<#x<<" = "<>=1;
for(int l=1,r=1,now=f[1];r<=n;r++,now+=f[r])
printf("%lld\n",ans); return 0;
}
2017 山東一輪集訓 Day7 逆序對
題解 滿滿的套路題。首先顯然從大到小列舉 然後每次生成的逆序對是1 i 1 的 這樣做dp是nk的 複雜度太高了 那我們轉化一下問題 變成sigma ai ai 據說是個經典問題。感覺非常奇妙 先容斥一下,也就是說 總的 至少1個條件不滿足 至少2個條件不滿足 那考慮一下如何算有x個條件不滿足 不滿...
2017山東day7 養貓
你養了乙隻貓,為了讓它快樂地成長,你需要合理地安排它每天的作息時間。假設一天分為 n 個時刻,貓在每個時刻要麼是吃東西,要麼是睡覺。在第 i 個時刻,假如貓是去吃東西,那麼它能獲得愉悅值 ei 假如是去睡覺,那麼能獲得的愉悅值為 si 貓要成長,不僅僅需要快樂,還需要健康的作息。經過研究,對於每乙個...
2017 山東二輪集訓 Day3 第一題
貪心,每人每次分給的一定是所需代價最小的v i 1v i 1 v i 1 個,且分給他的只需要比上乙個人多乙個。include include include include define ll long long using namespace std const ll inf 100000000...