原创 bzoj4477: [Jsoi2015]字符串樹(主席樹+Hash+Lca)

題目傳送門 。 解法: 長度小於等於10? hash+主席樹啊!!! 然後我就苦逼了的碼了一個鐘。 然後跑的賊慢倒數第三。。 網上的據說全是可持久化字典樹?? 什麼鬼我不會。。 只能用主席樹了。 建10棵主席樹來維

原创 bzoj3545: [ONTAK2010]Peaks(主席樹+最小生成樹)

題目傳送門 。 解法: 好題啊。 只會不強制在線的。 強制在線的表示不會。 離線。 首先x可以到達的點其實都可以互相到達。 那麼我們可以看作是一個聯通塊。 要求邊權儘量小其實就是最小生成樹啊。 離線首先按每次詢問的x

原创 bzoj4247: 掛飾(Dp)

題目傳送門 。 解法: 先掛鉤子多的。 因爲假設你最後選出來五個掛飾。 那麼肯定是找鉤子多的先掛。 那麼按照鉤子數排個序。 然後Dp一下就行 f[i][j]表示前i個掛完(不一定每個都要選)之後還剩j個鉤子。 f[

原创 bzoj4887: [Tjoi2017]可樂(矩陣乘法+快速冪)

題目傳送門 。 解法: 這種題都是矩陣乘法吧。 f[i][t]表示第t秒在i的方案。 那麼f[i][t]可以轉移f[i][t+1]和能夠與i相連的邊。 那麼這個轉移可以看作一個轉移矩陣。 首先矩陣的(i,i)都爲1表示每

原创 bzoj3613: [Heoi2014]南園滿地堆輕絮(二分+貪心)

題目傳送門 。 解法: 二分答案。 因爲後面的元素要大於等於前面的元素。 那麼我們使得前面的元素在滿足答案的情況下儘量的小就行。 這樣後面的元素選擇的餘地就更大。 貪心一下咯。 代碼實現: #include<cstdio

原创 bzoj5196: [Usaco2018 Feb]Taming the Herd(Dp)

題目傳送門 。 解法: f[i][j]表示前i天有j次出逃的最優方案。 隨便搞。 代碼實現: #include<cstdio> #include<cstring> #include<cstdlib> #include<ios

原创 bzoj3280: 小R的煩惱(費用流)

題目傳送門 。 解法: 一開始yy了個建圖。 完全沒毛病。 結果不知道怎麼判impossible了。。 很尷尬。 每天分成兩個點。 一個點x表示今天收到多少個活人。。 一個點y表示多少個瀕死的人。 今天僱的人一定會用

原创 bzoj2743: [HEOI2012]採花(樹狀數組)

題目傳送門 。 解法: 想了蠻久。 首先這道題肯定不能用前綴和相減什麼的。 那麼只能用區間1~l來表示答案。 因爲1~r就沒有了l的限制。 記錄每個點上一個出現的位置。 last[i]表示i上一個出現的位置。 能採到i

原创 bzoj4690: Never Wait for Weights(帶權並查集)

題目傳送門 。 解法: 我就寫過一次帶權並查集。 還好他不難想。。 看到這道題我就覺得是帶權並查集。。。 fa[i]表示祖先。 sum[i]表示跟祖先的差值。 xx表示x的祖先,yy表示y的祖先。 那麼每次x和y差w

原创 bzoj3296: [USACO2011 Open] Learning Languages(並查集)

題目傳送門 。 解法: 並查集。 一頭牛連向他能說的語言。 然後可以通過翻譯的話就相當於雙向邊咯。 意思就是牛可以去找語言,語言也可以找牛。 最後記錄有多少個不同的集合-1即可 代碼實現: #include<cstdi

原创 bzoj1112: [POI2008]磚塊Klo(主席樹)

題目傳送門 。 解法: 比賽的時候不知道怎麼就一直在想主席樹(可能最近做主席樹有點多) 然後什麼線段樹啊樹狀數組都沒想過。 然後就被師兄強行40M卡空間全爆了。。 大視野還是有良心的啊162M。。 就用主席樹求出中位數,

原创 bzoj2958&3269: 序列染色(Dp)

題目傳送門 玄學真的不會。 解法: f[i][j][k]表示第i位,k=0填B,k=1填W。 j=0表示一段長爲K連續的B都沒有。 j=1表示有一段長爲K連續的B。 j=2表示有一段長爲K連續的W。 因爲要先有B是連續

原创 bzoj3190: [JLOI2013]賽車(單調棧)

題目傳送門 。 解法: 跟水平可見直線很像啊。只不過這道題是從y軸開始的射線。 思路其實差不多。 單調棧維護下凸包。 先按照直線的k排序。 那麼進來之後t其他直線。 當前直線爲i。棧頂直線爲x。 如果i和x的交點在y軸

原创 bzoj3531: [Sdoi2014]旅行(樹鏈剖分+線段樹)

題目傳送門 。 解法: 據說叫動態開點。 需要用的點才建線段樹。 那麼最多隻有二十萬種不同的信息。。 跟主席樹一樣嘛。 YY就好了 代碼實現: #include<cstdio> #include<cstring> #inclu

原创 bzoj1095: [ZJOI2007]Hide 捉迷藏(動態點分治)

題目大意: 給出一棵樹,初始每個節點爲黑色。 C操作改變一個節點的顏色。 A操作詢問樹上最遠的兩個黑色節點的距離。 這道題我也是學了好久。 解法: 我用到的是動態點分治,當然大牛們打LCT也是可以的(萬能的LCT!!) 先普及一