一些題(十一)

2022-09-23 21:27:17 字數 2914 閱讀 4167

判斷乙個點對的最大流為 \(1\) 或 \(\ge2\),容易求出邊雙后做。接下來就要判斷兩個點的最大流是否為 \(3\),也就是它們是否在乙個邊三聯通分量中。這相當於刪去圖中任意一條邊後這兩個點都在同乙個邊雙中。於是就可以每次刪邊求邊雙,並用 hash 判斷。時間複雜度 \(o(n^2)\)。

對於每個 \(t_i>t\) 且若不進修隔離它最終造反的時間 \(\le t\),求出最左的隔離位置使得它最終造反時間仍 \(>t\),不妨設這個位置為 \(l_i-1\) 和 \(l_i\) 之間。那麼問題轉化為從 \([2,n]\) 中選 \(d\) 個關鍵點,使得 \([l_i,i]\) 中有關鍵點的 \(i\) 最多。注意到所有 \([l_i,i]\) 要麼包含要麼不交,即形成樹形結構,於是在這個樹上長鏈剖分貪心取即可。

容易列出變數數和方程數均為 \(o(r^2)\) 的線性方程組,若直接消元,時間複雜度為 \(o(r^6)\)。但注意該圖是 \((2r+1)\times (2r+1)\) 的網格圖的子圖,於是將變數按從上到下、從左到右排序後,在消第 \(i\) 行時只用考慮 \([i,i+2r]\times[i,i+2r]\) 這個子矩形的變化,時空複雜度 \(o(r^4)\)。當然也可以主元做到 \(o(r^3)\)。

\(o(r^4)\))

先按解 2-sat 的方式建出有向圖,然後 scc 縮點。那麼無解當且僅當以下條件至少乙個成立:

於是可以線性判定。

乙個線性做法。直接列舉第乙個人的分數和與他同分的人數,得:

\[^\sum_\sum_^[x^]\left(\right)^\\

=^\sum_[x^m]\left(\right)\sum_^\left(\right)^\\

=^\sum_[x^m]\left(\left(\over 1-x}\right)^n-\left(\right)^n\right)\\

=^[x^m]\left(\left(\over 1-x}\right)^n-\left(\right)^n\right)\\

=^\left(-[x^m]\left(\right)^n\right)

\]其中 \(f(x)=\left(\right)^n\) 的係數可以通過 \(f(x)'=nf(x)\left(-\over 1-x^k}\right)\) 來線性遞推出。

新增乙個 \(a\) 為 \(0\) 的點並假定它一開始就在集合中,那麼每個選擇自己加入集合的其它點都可以視作被新加的點拉進來的。考慮建一棵以新點為根的有根樹使得每個點都被它的父親拉進集合,那麼總貢獻就是每個點的權值乘上它的兒子個數減一再求和,也就是對每條樹邊 \((u,v)\) 邊 \(a_u+a_v\) 求和然後減去 \(\sum a_u\)。於是問題轉化為對每組 \(a_u \and a_v=0\) 的 \((u,v)\) 加入邊權為 \(a_u+a_v\) 的邊後求最大生成樹,可以用高維字首和輔助 boruvka 演算法在 \(o((n+a_i)\log n\log a_i)\) 的時間內完成。

對於給定的 \(f\),以 \(f\) 為根後 \(a,b\) 一定在根的兩個不同兒子的子樹中或者為根,可以進行樹形 dp。設 \(f_u\) 表示若已經確定乙個點在 \(u\) 的子樹中,找到它的最少詢問次數,\(g_u\) 表示一種最優方案的第一步。特殊地,對於葉子節點 \(u\),計 \(f_u=1,g_u=u\)。考慮轉移,對於節點 \(u\) 的最優詢問方案一定是,依次通過詢問 \(g_v\) 來確定每個兒子是否有關鍵點,如果有就遞迴下去,如果都沒有就是 \(u\)。容易發現按照兒子的 \(f\) 不降序排列一定最優,設排好序的兒子序列為 \(\_^k\),那麼有 \(f_u=\max\^k f_+i-1\},g_u=g_\)。確定答案時也是對根進行類似的過程,並且可以換根 dp 求出每個給定的 \(f\) 的答案然後取最大值。時間複雜度 \(o(n)\)。

設 \(d_i\) 為僅把第 \(i\) 個元素放在最前面後逆序對的變化量,那麼對於選出下標序列 \(\_\le\) 進行操作,逆序對的總變化量為 \(\sum_^k d_+2\sum_^k\sum_^k [p_>p_]-\),因為從前往後把每個 \(x\) 提前後 \(\,\ldots,p_\}\) 會進行翻轉。注意到對於 \(ip_j\),若 \(i\) 被選入,那麼一定存在一種最優方案使得 \(j\) 也被選入,證明可以考慮找到不滿足的 \(j-i\) 最小的 \(i,j\) 進行交換調整。於是存在乙個最優的方案 \(x\) 使得 \(\sum_^k [p_>p_]=\sum_^n [p_>p_j]\)。那麼拆一下貢獻,按照 \(d_+2\sum_^n [p_>p_j]\) 從小到大取 \(x_i\) 即可。

把書看成點,「批量閱讀」看成半平面,那麼就是要選代價和最小的半平面使得它們的並覆蓋率所有點。注意到若干個半平面的並的補是乙個凸集,也就是說對於所有橫座標為 \(x\) 的點,至多只用兩個「有效」的半平面取覆蓋它們。於是按 \(x\) 從左往右 dp,對每種橫座標記錄這兩個半平面是什麼即可。複雜度 \(o(pn^2)\)。

通過調整,一種最優方案肯定是他從根走到乙個葉子,過程中它的分身不停的傳送然後遍歷其它點。若某時刻他和他分身在同乙個點,就將這個點記作關鍵點。設 \(lf_u\) 表示 \(u\) 子樹中的葉子集合,\(dep_u\) 表示 \(u\) 的深度。考慮從上往下 dp,設 \(f_v\) 表示 \(v\) 是關鍵點並且只剩 \(v\) 的子樹沒訪問過的最小時間。考慮列舉 \(v\) 的祖先中最近的關鍵點 \(u\) 進行轉移,若 \(lf_u\setminus lf_v=\emptyset\),那麼 \(u\) 為 \(v\) 的父親並且 \(v\) 是 \(u\) 的唯一兒子,有 \(f_v=f_u+1\);否則記 \(lf_u\setminus lf_v\) 中最深的點為 \(x\),那麼一種最優方案一定是在 \(u\) 時讓分身遍歷完 \(lf_u\setminus lf_v\setminus \\) 的所有點,然後分身走向 \(x\) 的同時本體從 \(u\) 走向 \(v\),注意到此時\(u\) 只可能為最深的使得 \(dep_x\ge dep_v\) 點,否則可以調整使得有更深的關鍵點。於是在從上往下 dfs 的過程中暴力維護乙個棧找 \(u\) 即可,時間複雜度 \(o(n)\)。

一些博弈題

題目鏈結 題面較長,這裡不貼圖了 一道比較基礎的博弈題,關鍵在於,如果起始點距離與0邊相連點之間存在奇數條邊時則先手存在必勝策略,反之則先手必敗。include include include include include include include include include inclu...

一些智力題

海盜分寶石 這是一道很有趣的推理題。在美國,據說20分鐘內能回答出這道題的人,平均年薪在8萬美金以上。這是一道很有趣的推理題。5個海盜搶到了100顆寶石,每一顆都一樣的大小和價值連城。他們決定這麼分 1。抽籤決定自己的號碼 1,2,3,4,5 2。首先,由1號提出分配方案,然後大家5人進行表決,當且...

一些智力題

1 你要在乙個nxm的格仔圖上塗色,你每次可以選擇乙個未塗色的格仔塗上你開始選定的那種顏色。同時為了美觀,我們要求你塗色的格仔不能相鄰,也就是說,不能有公共邊,現在問你,在採取最優策略的情況下,你最多能塗多少個格仔?給定格仔圖的長n和寬m。請返回最多能塗的格仔數目。思路 按照對角線塗色,可知格仔的一...