「考試」省選9

這場好詭異啊啥也不會。。spa

T1
很厲害的虛樹\(dp\)。雖然是抄的cf。Upd:話說題面裏的syx是sigongzi嗎?全是我在乎淫。
考慮化一下式子。
兩個點之間的貢獻是:
\[\varphi(ab)dis(a,b)=\frac{gcd(a,b)\varphi(a)\varphi(b)}{\varphi(gcd(a,b))}(dep_a+dep_b-2dep_{lca})\]
而後嘗試枚舉這個\(gcd\),設爲\(d\)
但是發現直接找\(gcd(a,b)=d\)的不是很好找,可是\(d|gcd(a,b)\)的很好找。
那麼咱們設\(g(n)\)\(n|gcd(a,b)\)的貢獻,\(f(n)\)\(n=gcd(a,b)\)的貢獻。
這樣就有:
\[g(n)=\sum\limits_{n|d}f(d)\]
莫比烏斯反演獲得:
\[f(n)=\sum\limits_{n|d}\mu(\frac{d}{n})g(d)\]
如今考慮求\(g(d)\)
列出公式:
\[g(d)=\sum\limits_{d|w_x}\sum\limits_{d|w_y}\varphi(w_x)\varphi(w_y)(dep_x+dep_y-2dep_{lca(x,y)})\]
拆一下:
\[g(d)=\sum\limits_{d|w_x}\sum\limits_{d|w_y}\varphi(w_x)\varphi(w_y)dep_x+\sum\limits_{d|w_x}\sum\limits_{d|w_y}\varphi(w_x)\varphi(w_y)dep_y-2\sum\limits_{d|w_x}\sum\limits_{d|w_y}\varphi(w_x)\varphi(w_y)dep_{lca(x,y)}\]
這樣咱們作一次樹型\(dp\),維護一下每一個點子樹中的\(\varphi\)\(dep\varphi\)的和,而後就能夠線性的用子樹合併統計答案了。
而後發現要作\(n\)\(dp\),每次都作所有的點複雜度過高了。
發現只和關鍵點有關,直接建虛樹\(dp\)就能夠了。
笑神寫了啓發式合併。並不會。指針

T2
也是很不錯的題不過兩天的T2彷佛都和結論題同樣。
咱們發現若是多是\(yes\),那麼必然有一隻豬存在於所有的三元組中,設它爲\(p\)
而後咱們必然是將這隻豬先運過去,而後某時間運回來,而後在最後再運回去。
考慮中間運回來這一次,以前的一隻是\(i\),以後的一隻是\(j\)
那麼在不考慮這三個點的狀況下若是剩下的點三元組中的其餘兩個建邊以後是二分圖就是\(yes\)咯。
由於\(p\)回來以前那次對岸可能打架,回來以後本岸可能打架,可是這些可能打架的時間中,\(i\),\(j\)全都在河中間,因此無需考慮。
而後複雜度仍是不對。
考慮枚舉\(i\),而後作到線性判斷是否存在某個點可使得這個點消失以後不存在任何奇環。
這個點須要通過全部奇環,而且他的全部兒子的子樹中沒有一個奇環和一個偶環跨過他到他的祖先。
第一個條件對於全部奇環樹上差分,判斷這個點是否通過了所有的奇環。
而對於第二個條件進行\(dp\),求出這個點子樹中奇/偶環返祖邊的另外一端的最淺深度。
而後就能夠直接判斷是否存在解了。blog

T3 NPIO
傳上來了能夠下載:https://files.cnblogs.com/files/Lrefrain/npio.zip
十個點好惡心啊,打開就發現全是1e9靠。
1.\(a+b\ problem\)
先運行一次獲得\(b\)序列的初始值,而後直接在本身程序裏跑就好了。
2.1000w長度卷積
\(NTT\)作不了,最多作800w,\(FFT\)一下就好了,由於值域很小能夠直接\(long\ double\)
3.1e9長度卷積
由於值域很小因此存在循環節,那麼按照循環節來跑出來長度\(2n\)的卷積累,剩下的直接分別計算貢獻就好了。
4.個數1e9值域1e9的排序
確定不能直接\(sort\),因爲數據隨意,咱們能夠認爲數據足夠離散,這樣開1e9個char當桶就夠了。
5.大小1e9的樹求每一個點的子樹大小
首先他給出的\(father\)是模出來的,咱們先跑出最終結果,而後用逆元倒推回去就能夠獲得每一個點的\(father\)就好了,而後\(sz\)\(int\)存不下,就大於270000000的部分\(sz\)很小用\(short\),剩下的用\(int\)就好了。
6.大小1e9的基環樹求最小生成樹邊權和
先加和所有邊權,而後發現值域很小,直接枚舉撤掉哪一個權值的邊而後和給出的樣例對拍便可。
7.1e9次操做,支持動態插入,動態查詢最大值,動態刪除最大值
指望狀況下堆的大小是0,直接用堆幹就好了。
8.1e9次操做,支持動態插入,動態查詢中位數
聯賽前玩過的套路,維護一箇中位數指針,隨機狀況下並不會移動不少次。
9.1e9個數,動態插入,動態維護出現過的數的個數
直接bitset暴力就好了
10.1e8個點,1e9條邊,求每一個點雙中點編號的和
邊數遠多於點數,並且數據生成能夠保證奇偶不相連,那麼就奇偶兩個點雙,直接比較輸出就好了。排序

相關文章
相關標籤/搜索