ZJOI2019Round#2


亂聽課記錄

關於樹的分治問題&雜題選講 張哲宇

邊分治

(邊分不是很雞肋嗎)

例題一

題目大意:給出兩顆有正負邊權的樹,求出兩個點\(u,v​\)使得兩棵樹中\((u,v)​\)距離的和最大。\(n \le 10^5​\).

點分治

例題二

題目大意:\(n\)個點的樹,每個點有非負點權,求權值第\(k\)大的聯通塊。\(n,k \le 10^5\).

考慮點分治,對於每一個分治中心,進行的點分相當於多了一個“強制選該分治中心”的限制。

對於每一層的分治,我們dfs重標號,那么對於第\(i​\)個點有兩種決策:選點\(i​\),那就繼續考慮dfs序為\(i+1​\)點的決策;不選點\(i​\),則跳到dfs序為\(i​\)子樹的后一個點。如上的轉化相當於把一個連通塊轉化成了一條路徑,因此第\(k​\)大連通塊問題就變成了經典\(k​\)短路問題(但是並不清楚在每層分治都做這個\(k​\)短路的復雜度是怎樣的)

例題三(例題一)

題目大意:參見例題一

突然,掉線。

聽說點分做法“實質上”就是邊分。

例題四

題目大意:給出\(n\)個點的有根樹,每個節點上有一個一次多項式,求每個節點到根的多項式乘積的和。\(n \le 10^5\).

大致就是在一層層的點分中心上跳,感覺可能類似codechef Yet Another Tree Problem

全局平衡二叉樹

zzy的全局平衡二叉樹講跟沒講一個樣。

還是去看tls寫的吧基於變換合並的樹上動態DP的鏈分治算法和全局平衡二叉樹學習筆記

例題五(例題四)

(這個用全局平衡二叉樹怎么做?)

All Last

題目大意:給出一顆\(n​\)個點的有根樹,\(q​\)次詢問距離點\(p​\)距離\(\le d​\)且不在路徑\(u-v​\)上的點權\(\max​\).\(n,q \le 10^5​\).

例題六

題目大意:一顆有根樹,每個節點有二維坐標\((x,y)\)。動態加入一個葉子\(v\),並詢問\(v\)到根路徑上,與\(v\)\(dis \in [l,r]\)的所有節點形成的凸包與斜率為\(k\)的直線的切點。

怎么突然放b站鬼畜了???計算鴨海星

推銷Marp

FJWC2019選講

雜題一

題目大意:要求\(O(1)\)回答是否存在\(n\)個點允許有重邊不能有自環且弱連通的流網絡,滿足流量平衡且流量為\(1\)的邊有\(a\)條,流量為\(2\)的邊有\(b\)條,不存在其他流量的邊。\(n \ge 2\).

標算:分類討論

雜題二

打表題,zzy直接跳了。

雜題三

題目大意:初始有一個根,強制在線加葉子,要求每次加葉子之后輸出當前樹的權值。定義一顆樹的權值為交換兩顆互不為祖先的子樹后的最大直徑。\(n \le 5\times10^5\).

mine:處理根的子樹深度最大、次大、第三大的深度,每次把第三大的子樹嫁接給次大的最后一個節點。

上面這個做法有點小問題,因為嫁接的第三大子樹不一定要是根的直接子樹,所以選擇的應當是一個“三叉戟”的形態,使得選取的邊數最多。

雜題四

題目大意:構造一個恰有\(k\)條直徑的邊權非負的樹,使用點數\(\le 5000\)\(k\le 5000000\).

先從若干個菊花相接的情形開始考慮。

雜題五

題目大意:有一顆\(n\)個點的樹,每次可以刪除一個度數在\([L,R]\)之間的點然后得到\(a_i\)的貢獻,要求最大化貢獻之和。

dp

雜題六

\(10^4\)個棧,棧頂元素是\(s_i\),要求和spj玩游戲:選手每次選擇一個數\(x\),spj返回一個操作$\le / \ge \(,並把所有滿足\)s_i \text{ opt } x\(的棧頂元素彈出並返回新的\)s_i$。要求在\(50\)次內清空所有棧。

一種顯然的想法是每次取中位數,但是這個做法非常容易卡。問題出在剩余元素不同的棧應當賦不同的優先值。

(然后我也不知道怎么就)對於大小為\(x\)的棧構造指數權函數\(w(x)=p^x\),操作次數近似\(\frac{\ln(n\times p^k)}{\ln \frac{2p}{p+1}}\)。取\(p=4\)時最大操作次數為\(49\).

雜題七

題目來源:#2392. 「JOISC 2017 Day 1」煙花棒

這個題去年講過的呀,怎么又搬出來講……

等等我怎么還沒做掉。

雜題八

題目大意:\(n\)個點,\(m\)條邊的無向圖,每個點有權值\(a_i\),求一條\(1\)\(n\)的路徑,最小化路徑權值從大到小排序后的字典序。\(n \le 10^5,m \le 5\times 10^5\).

排序之后字典序最小相當於比較權值的桶的字典序大小。

雜題九

(zzy說題目有點難。於是看完題直接跳了)

雜題十

題目大意:給定一個點仙人掌,邊權為\(1\),求最短路長度為\(i\)的點對個數。

樹的情況應該是個經典點分FFT問題。

這里是縮點點分;然后對於點分中心為環的情況,再分治處理?


1/2雜題選講 高嘉煊Samjia

Incremental Double Free Strings

題目大意:給出整數\(n\)滿足\(1\le n\le 26\),定義一個長度為\(n(n+1)\over 2\)的字符串是合法的,當且僅當滿足以下三個條件:

  1. 所有字符都是小寫字符

  2. 不存在兩個相鄰相同字符

  3. \(i=1\cdots n\),總存在一個字符\(c\)在串中出現了\(i\)

給出\(n,k\),求所有合法字符串中字典序第\(k\)小的。\(k \le 10^{18}\).

CHEFKC

題目大意:求帶權有向圖的第\(k\)小割。\(n \le 77,m,k\le 777\)

題目來源:Chef and Cut

依舊是k短路題,考慮一個狀態\((i,p[])\)表示考慮前\(i\)個數,每個數在\(S\)集合內或\(T\)集合內的割大小。那么從初始狀態\((0,[])\)開始拓展。

好像有一種比講課人更優的做法。

以上這個做法每次拓展的步長為1,那么不僅時間效率低,空間開銷也有相當多是不必要的。

考慮從每一個完整狀態開始A*。首先不做任何限制,僅僅跑一趟最小割,然后以這個最小割的狀態作為初始狀態。對於每一次對最優狀態\(\text{ sta }\)轉移調整到\(\text{ nxt }\),枚舉一個\(len\)表示\(\text{ nxt }\)\(len\)位完全固定,然后從\(\text{ sta }\)中繼承前\(len-1\)位並將\(len\)取反。這個轉移是為了確保不重不漏,且按照權值順序經過所有狀態。

這可能是算是一個A*的處理技巧吧,但是不一定通用。有些時候從完整狀態為保證按權值順序經過所有狀態可能比較困難。

這里是寫的題解:【A* 網絡流】codechef Chef and Cut

Spoonerisms

題目大意:給出\(n​\)個字符串,要求選出其中四個記為\(A,B,C,D​\),使得存在非空的字符串\(p,q,r,s​\)滿足\(A=pq,B=rs,C=rq,D=ps​\),其中\(r\not= p,q\not= s​\)\(\sum |S | \le 500000​\).

(聽說標算鍋了?然后zzq神仙提供了\(O(n\sqrt n)\)的“標算”)

問題轉為求四元環,但是復雜度是\(O(n\sqrt n)​\)的。

cf1146H Satanic Panic

題目來源:H. Satanic Panic

dp+計算幾何

Chopping hands


水題選講 鍾子謙

Complete The Graph

題目來源:cf Round #372 1b 加強

題目大意:有一張\(n​\)個點\(m​\)條邊的簡單正權無向圖,\(S​\)\(T​\)的最短路為\(L​\),現在有一些邊的邊權未知,請輸出任意一種方案。\(n,m\le 500000​\).

對於每一條邊權未定的邊,把它的邊權先設為1。然后考慮首先處理出\(dist_i\)表示在如上初始化的情況下,\(T\)\(i\)的最短路距離。之后再從\(S\)開始做dij,設\(S\)\(u\)的最短路為\(len_i\),那么當前若以\(u\)增廣一條邊權未定的邊\((u,v)\),就將其邊權設為\(\max\{1,L-len_u-dist_v\}\)。以上構造能夠保證問題的完全轉化。

更詳細的可以看我題解【圖論 思維】cf715B. Complete The Graph加強

題目來源:AGC032F

喂鴿子

題目來源:集訓隊作業2019加強

題目大意:有\(n\)只鴿子,每次等概率選取一只鴿子喂一粒玉米。每一只鴿子只有喂了\(k\)粒玉米才會飽。問\(n\)只鴿子都被喂飽的期望步數。

感覺好經典啊。然而不會

Mergesort Strikes Back

題目來源:Avito Cool Challenge 2018 cf1081G. Mergesort Strikes Back

Traffic Blights WF2019

題目來源:ICPC World Final 2019

Mouse

題目來源:Info(1) Cup 2019

題目大意:交互庫有一個\(1,2,\cdots n\)的排列\({p_i}\),每次可以詢問一個排列\({q_n}\),交互庫會返回相同的位置個數。要求還原\({p_n}\).\(n \le 256\),詢問次數\(\le 2400\).

考慮首先隨機一個完全不同於原排列的排列\(p_i\),再從這個排列開始“試探”。

不清楚復雜度證明。

Keep clicking,keep flipping

題目來源:IPSC2011

考慮貪心並證明。


構造題選講 楊帆

cf720c

題目大意:有一個\(n\times m\)的網格,求構造一個四連通塊(每個格子通過四個方向的邊連通),使其中大小為3的\(L\)形(可旋轉)數目恰好為\(k\)\(n\times m \le 10^5\)

mine:考慮矩形\(a\times b\),那么有\(4(a-1)(b-1)\)個合法的\(L\)形。我們找一個合法\(L\)形數量接近\(k\)的矩形:對於一個角元素,它有3的貢獻;對於一個邊元素,它有6的貢獻,這樣就解決了模4下的0,1,2,3的合法性。

cf453c

cf819e

題目大意:一張\(n\)個點的完全圖,要求找到若干個三、四元環,覆蓋每條邊恰好\(2\)次。\(n\le 300\)

分奇偶討論,考慮從\(n=3\)\(n=4\)的情形加點。

cf933e

題目大意:有一個長度為\(n\)的序列,每次可以選擇相鄰兩個數\(a,b\)將其同時減去\(\max\{a,b\}\).求操作到無法操作的最小代價。\(n \le 10^5\)

構造一個\(b_i\)表示\(i\)這個位置減去的代價。思維構造題。

cf317e

題目大意:有一無窮大的網格圖,還有點\(A,B\)和一些障礙。每次可以選擇一個方向,對於\(A,B\)如果該方向沒有障礙則向這個方向移動一步。目標是使\(A,B\)重合,要求步數\(\le 10^6\).障礙不超過\(400\)個,坐標絕對值\(\le 100\)

首先考慮障礙為1的情況,則將\(A\)靠在障礙上,再將\(B\)移到和\(A\)的同一直線上,接下去再將\(A,B\)靠攏即可。

mine:如果\(A,B\)不連通則無解;如果\(A,B\)都與無窮遠處連通,那么就把\(A,B\)都移出來,再用邊界障礙做障礙=1的情形;如果\(A,B\)被封閉在一個障礙塊里,那么因為障礙塊的最大面積是\(100\times 100\),就隨機\(10^4\)次,每次走\(10^2\)步。

std:找到\(A\)\(B\)的最短路,並將\(A\)沿着這條路徑移動。如果\(A,B\)之間的距離縮短那么重復這個過程。當不能操作時,那么就找一個邊界上的障礙來做障礙=1的情況即可。

cf gym 100162e

好像是大力分類討論?

cf804e

(怎么跳了啊)

cf1053e


雜題選講 毛一琛

序列

題目大意:長度為\(n\)的序列\(A\),求長度為\(n\)的排列\(B\)滿足\(\min \{|A_{B_i}-A_{B_{i-1}}|\}\)最大,\(n \le 10^5,A_i \le 10^9\)

\(n\)為偶數時,有上界\(\min\limits _{i=1}^{n\over 2}\{a_{i+{n\over 2}}-a_i\}\)

買置換

題目來源:2014集訓隊互測

(bzoj怎么沒數據啊)

打怪獸

貪心&dp&結論

BBQ加強

題目來源:AGC001E加強

考慮組合數意義,相當於是一個矩形的兩個對點路徑的方案數。

注意到這里所求的組合數意義的路徑必定經過直線\(y=-x\),那么就\(f[i][j]\)表示第三象限所有點走到

Rational-Sums

題目來源:hackerrank Ad Infinitum18

這是推式子的數學題吧。

似乎還要一些觀察和多項式的性質。

Permanent

題目來源:cf468e

構造二分圖。(接下去沒懂)

Addition without carry

二進制給出長度為\(n​\)的數組\(a​\),求一個長度同樣為\(n​\)的數組\(b​\)滿足:

  1. \(b_i \ge a_i\)
  2. \(b_1|b_2|\cdots b_n=\sum b_i\)

要求最小化\(\sum b_i\)\(n \le 3\times 10^5,\sum|a_i| \le 3\times 10^5,\max\{|a_i|\} \le 3\times 10^5\).

題目來源:cf gym102154a

第二條件等價於\(b_i\)上的1互不重疊。

考慮如何暴力:貪心地從高到低位確定\(b_i​\),首先假設若第\(i​\)位為0,那么使\(1\cdots i-1​\)位為1檢查是否合法。

有趣的游戲

題目來源:51nod 1599

湊數題

題目大意:有一個\(n\)個點的競賽圖,其中\(k\)條邊的方向已經確定,剩下邊的方向等概率隨機。求最小環的期望個數。\(n \le 5000\).

最小環一定是三元環。\(O(n^2)​\).


座位空了好多

水題選講 不知名大爺

Rikka with an unnamed temple

Square Subsequences

題目大意:給定長度為\(n\)的字符串\(S\),求最長的"平方子序列"(一個字符串被稱為"平方串"是它可以被表示為\(AA\)的形式)。\(|S|\le 3000\).

枚舉一個斷點\(len\),求\(S(1\cdots len)\)\(S(len+1\cdots |S|)\)的最長公共子序列的長度。

然后標算是把求最長公共子序列的dp給壓位,復雜度\(O({n^3\over{6w}})​\)……

Forests Fires

題目來源:cf1086f

芒果冰加了空氣

題目來源:北大集訓d1t3

題目大意:給出一顆\(n\)個點的樹,每次點分隨機選取連通塊內一個點作為下一層點分中心。求帶標號點分樹種類數。

mine:首先會自然想到一種naive的遞歸子問題划分,但是容易發現

\(f[i][j]​\)表示對\(i​\)的子樹點分,並且\(i​\)在點分樹中的深度為\(j​\)的方案數。

\(f'[x][i]=\sum_{j=1}^i\sum_{k=i-j}^{size[y]} f[x][j]*f[y][k]* {i-1\choose j-1}\)

tree

題目大意:給出\(n\)個點的樹,每條邊有\(int\)范圍內的邊權,\(q\)次修改更改路徑\((u,v)\)上的邊權為\(w\),並詢問離\(1\)最遠的點的距離。

動態點分?全局平衡二叉樹?

Rikka with Data Structures

題目大意:要求維護操作

  1. 區間加
  2. 區間賦值
  3. 區間詢問\([L,R]\)內以\(x\)為左端點,最大值在左/右端點的區間個數。

類似樓房重建。

Epic Convolution

題目來源:cf1054h

二維fft

Diameter

題目大意:求\(n\)個點有標號直徑為\(0,\cdots n-1\)的無根樹方案數。\(n \le 500\).

很類似烷烴計數啊。

problem

題目大意:求\(n!\text{ mod } p\)\(0 \le n < p \le 10^{12}\)

【翻譯向】階乘模大質數

problem2

題目大意:自然數倒數和。\(n\le 10^{12}​\).

problem3

組合數 行求和。

Cutting Squares

題目來源:PE270

先dp跑出較小解,再觀察發現性質。

powerful number 在求積性函數前綴和中的應用

powerful number:每一個質因數的次數都大於等於2的數。

求積性函數前綴:\(\sum f(i)\),如果存在積性函數\(g(i)\)滿足對於任意質數\(p\)\(f(p)=g(p)\),那么(據說)可以利用powerful number的性質快速求\(\sum f(i)\).

並沒有理解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM