51Nod 演算法馬拉松21 迎新年

2022-02-27 14:24:06 字數 2558 閱讀 6922

這次打算法馬拉松是在星期五的晚上,發揮還算正常(廢話,剩下的題都不會= =)。

講講比賽經過吧。

8:00準時發題,拿到之後第一時間開始讀。

a配對,看上去像是二分圖最大權匹配,一看範圍嚇傻了,先跳過讀後面的題。

b完全二叉樹的方差,大概看了一遍,好神的樣子,跳過。

c多項式?好吧沒學過fft和ntt的我肯定不會,跳跳跳。

d最大值,哎呦這函式什麼破玩意兒,看不懂,跳跳跳。

e b君的射擊,臥槽畢克大人您出題就算了出這麼一道碼農題是要鬧那樣,跳跳跳。

f那些年,我們一起講的故事,臥槽這特麼簡直就是道純語文題,跳跳跳。

哎等等,跳沒了……

好像a比較簡單,先想想a算了……

第一思路是二分圖最大權匹配,然後費用流暴力,一看資料範圍這顯然不靠譜,然後就開始思考問題的特殊性質。

不經意間按了幾下f5,臥槽怎麼你們做的那麼快,看來是我想複雜了,這應該是個不太難的題。

想了想匹配的構造方法,貪心似乎不太可行,別的方法一時也想不出來,算了好像可以列舉每條邊計算貢獻……感覺像是對的,但是又對此深表懷疑……

中間又按了幾次f5,臥槽你們做題怎麼這麼神速……看來這題確實簡單,反正wa了也不會有懲罰,看我碼一發列舉邊計算貢獻,隨手一交,啊哈居然a了……

自己交的比較早,所以是第18個a的(為什麼我記得是第19個……還是說是第19個提交的……),排名還不錯……(機房其他人好多都第幾十+才a的……)

看了看其他題,e題貌似之前看少了連通的圓可以使中間那塊也變成洞,感覺自己並不會寫。f題讀了半天還是沒讀懂……d題的函式看懂了就是十進位制位倒過來然後亂搞,然而還是沒思路。c題也看了兩眼,一看別人的執行時間都是十幾ms,感覺像是o(1)的結論題,打了一發print input()(這是python2)然而過不去樣例……

然後開始搞b題,看見方差最小感覺像是乙個三分平均數然後二分圖最小權匹配,搞了半天搞出來新樹直徑的結論,然而並沒有推出題解的神貪心,寫了一發三分平均數+最小費用最大流(二分圖最小權匹配),然後不知道哪兒寫掛了,樣例都過不去(也可能是函式根本不單峰……)……調了半天調不出來,狠狠心一交,1w19t,算了我棄療……

腦子昏昏漲漲,就此棄療。星期六和星期天也沒有再來做題,由於第一題交的早,最終成績rank60,真是便宜我了。(然而排名太低,rating往下掉了……= =)

隨便水水比賽就拿到了排名是20的倍數這個buff,話說運氣真是好……

話說今天才收到點頭盾,這速度我給差評……

給a題貼個題解:

既然要求匹配點的距離和最大,那麼兩條路徑一定要盡可能相交(如果不相交,交換兩條路徑的端點不會變劣)。或者說,匹配路徑一定要盡可能經過長的邊。不過這還是不太好搞,所以放棄構造方法,考慮對每條邊計算能出現在幾條匹配路徑中,也就是說能對答案產生多少貢獻。

考慮一條長為w的邊,設這條邊連線的兩個連通塊的大小分別為a和b。為了保證距離和最大,我們需要使得盡量多的匹配路徑經過這條邊,所以應該盡量讓邊兩端的點進行匹配,因此這條邊最多經過min次。

邊與邊之間互不影響(我不會證……),所以一遍dfs/bfs之後列舉每條邊計算貢獻即可。為了保險(防爆棧),我用的是bfs。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int maxn=100010;7

struct edgee[maxn];

8void

bfs();

9 vectorg[maxn];

10int n,q[maxn],prt[maxn]=,size[maxn]=;

11long

long ans=0;12

intmain()

19bfs();

20for(int i=1;i)

25 printf("

%lld

",ans);

26return0;

27}28void

bfs()38}

39for(int i=n;i;i--)

43 }

view code

附官方題解:

(話說構造法真的可行嘛……我仍然理解不了貪心構造……只會寫o(n2m2)的費用流……囧囧囧)

反思:這次打比賽的時候有點著急,b題也沒有耐心仔細想/寫,發揮並不太好。

a題看見別人神速過題之後就有點慌了,一改求穩的作風,憑著直覺交了乙份**,能a估計是運氣。今後的比賽或者是考試一定要求穩,畢竟無緣無故掉了幾十分上百分可是很要命的。

下一站,uoj test round #2。

加油。

51nod演算法馬拉松32

比賽鏈結 馬拉松是真的難 應該是我太菜了tnt 同bzoj1534 題解戳這裡 n個有標號的點,其中m個是葉子節點。問有多少數的形態。include include include include include using namespace std typedef long long ll co...

51nod演算法馬拉松15

智力徹底沒有了。看來再也拿不到獎金了qaq。a b君的遊戲 因為資料是9b1l,所以我們可以hash試一下資料。include include include include define rep i,s,t for int i s i t i define dwn i,s,t for int i ...

51nod演算法馬拉松13

a 取餘最長路 不難發現路徑可以拆成三條線段,只要知道兩個轉折點的位置就能計算出答案。設sum i,l,r 表示第i行從l到r元素的和,則答案可以表示為sum 1,1,x sum 2,x,y sum 3,y,n p。字首和一下轉化成 s3 n s3 y 1 s2 y s1 x s2 x 1 p,從小...