暑假集訓記錄

infinite2021發表於2024-07-20

這裡記一些從 7.15 開始做的 NOI 篇或者讓人眼前一亮的題目/trick。

(哦,前面的題可能忘了某些細節了。)

  • P3452

求補圖連通塊個數。

  • P4555

首先看到迴文串,先上馬拉車。

然後發現馬拉車雙迴文不好做,考慮拆成兩部分。

大概就是維護一個以 \(i\) 為左端點/右端點的最長迴文串。

然後列舉分界點取個 max 就行了。

  • P2375

根據 KMP next 陣列的定義,發現這個字串的公共前字尾一定是形如 \(ne[ne[j]]\) 這樣的形式。

題目要求前字尾不重疊,所以判斷長度是否超過二分之一就行了。

  • P10641

需要長鏈剖分,然後用堆維護前 \(k\) 大的鏈即可。

  • accoders 10469

求區間 LCA,因為 LCA 是可以兩兩之間結合的,所以拿樹剖維護下 LCA 就行了。

  • P3455

把原式化成 \([gcd(i,j)==1]\) 的形式,然後就可以莫比烏斯反演了。

之後是套路的列舉約數之後整除分塊了。

  • P3649

迴文自動機(PAM)板子題。

簡單說一下。

首先有兩個根:奇根和偶根,表示迴文串長度是奇數的資訊存在奇根下面,偶數同理。

然後樹上每個點走到根再走回來就是原字串。(邊權是字元)

迴文自動機的 \(fail\) 指標指的是這個節點表示的字串的最長字尾。

  • P2398 & P1447

這兩個題其實可以放到一起說,核心是求 \(\sum_{i=1}^n \sum_{j=1}^m gcd(i,j)\)

有一個尤拉函式的性質:

\[\sum_{d|n} \phi(d)=n \]

然後就好做了。

  • P3488

Hall 定理的題。

首先根據 Hall 定理:二分圖左部點的任意 \(i\) 個點一定可以和右部至少 \(i\) 個點匹配。

然後列不等式,化簡發現右邊是定值,左邊是一個區間和,所以線段樹維護最大欄位和就行了。

  • P2387

寫的歪解:動點 SPFA。

考慮如果邊只有一個權值是好做的,跑最短路就行了。

現在新加了一個邊權,所以想到對一個邊權排序,然後每次把所有相同邊權的邊加進去,跑 SPFA,再統計答案。

  • accoders 9003

圓方樹板子。建圓方樹,對圓方樹樹上差分,然後統計圓點的經過次數就行了。

  • accoders 2334

差分約束紙張題,但是我調了小半天,因為沒有 STL。

  • P4111

矩陣樹定理板子。

簡單說一下。

首先說一下拉普拉斯矩陣。

對於任意的 \(i\),矩陣的 \(a[i][i]\) 為點 \(i\) 的度數。

對於任意的 \(i,j\),矩陣的 \(a[i][j]\) 表示 \(i,j\) 之間連邊數量的相反數。

然後拉普拉斯矩陣去掉任意一行和任意一列所得的矩陣行列式就是最小生成樹的數量。

做的時候把它消成三角矩陣,對角線乘積就是答案。