嗯,總之,是我太傻了。
我真傻,真的,我單知道最小生成樹,卻不知道還有最大生成樹
最大生成樹....
累加每乙個環內,最大生成樹的邊權,(對環求最大生成樹,則必然剩下乙個邊權最小的邊(因為是求生成樹,所以這個邊肯定不會被算上))
然後因為對於不同聯通塊,跑最大生成樹,彼此之間依舊無法有想連線的邊,所以對於森林跑最大生成樹是沒有問題的
最後所有邊的邊權和 減去 所有聯通塊的最大生成樹的邊權和 即可得到答案
最小生成樹性質之一:最大邊權最小
最大生成樹性質之一:最小邊權最大
最後是吐槽:我寫了4kb的dfs,瘋狂地dfs,使用各種奇奇怪怪的操作,並且計算的複雜度是允許的!最後好不容易調過了樣例
最後因為陣列開的太大,直接mle,連正確性都不知道....
ac**如下:
我t1為了完成sb的4kb的超暴力搜尋,花費了差不多2個小時的時間,然後看到這道題後,我一眼以為是乙個博弈論...
然後我又想了想,覺得自己的題意好像出鍋了....
然後就按照貪心思想完成了乙個dfs,最後貪心順利騙到10分...
dp題意:
最優策略指:差值最大
因為我們在某個位置選或是不選由[i+1, i+m]中的狀態推導來的,也就是說,我們要保證下乙個人取得是最優策略。
但是我們正序進行的話,我們無法保證當前狀態是最優策略,所以我們倒序進行
劃分階段:
以進行每個點i為階段
f[i]表示,在當前回合,選擇數ai時,所能得到的最大得分
新增狀態
正常操作:
f[i][0]表示到第i個數時,該棋子為大魔王選時,你的得分減去大魔王的得分
f[i][1]表示到第i個數時,該棋子為你選時,你的得分減去大魔王的得分
f[i][0] = max - a[i]
f[i][1] = min + a[i]
也就是說要維護f[k][1]和f[k][0]在[i-m, i-1]的單調性
倒序與第一題一樣
優化1:空間優化
假定第ai個數必須取,f[i]表示若選擇一定選擇第ai個數,當前的人和對方的最大差值
因為每個人都取最優策略,所以選擇第ai個數我們能夠得到的分數是
f[i] = ai - max(j ∈ [i+1, i+m])
可得方程f[i] = ai - max(j ∈ [i+1, i+m])
因為f[j]是對方的最大差值,我們選擇了a[i],則我們要計算自己的得分,就要用a[i] - max
優化2:時間優化:
(1)單調佇列維護單調性:好寫,**量小
(2)線段樹取區間最大值,正常操作,顯然
不得不說,樣例就是sb,我最初以為是只能從根節點出發
然後我就寫了個樹dp的暴力,然後就爆0了
後來才知道,是求的直徑.....
暴力思路:
對於每一次詢問,都手動封點,求樹的直徑
能拿50%的分
正解思路:不會,回來補吧....
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...
NOIP模擬賽 老師
題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...
NOIP模擬賽 分錢
題目描述 兩個人在街上撿到了一些錢,這些錢共有n張,他們等了很久也沒有等來失主,於是決定把錢平分。但錢可能無法平分。他們先把能夠平分的錢盡量先平分了,使得剩下不能平分的錢盡量少。這些不能平分的錢怎麼辦呢他?他們決定拿去賭場裡面賭一把。他們運氣太好了,那些不能平分的錢變成了雙倍,於是他們就把那個錢分了...