bzoj 3528 [ZJOI2014] 星系調查 題解

【原題】

星系調查
【問題描述】
銀河歷59451年,在銀河系有許許多多已被人類殖民的星系。如果想要在行
星系間往來,大家一般使用連接兩個行星系的跳躍星門。  一個跳躍星門可以把
物質在它所連接的兩個行星系中互相傳送。
露露、花花和萱萱被銀河系星際聯盟調查局任命調查商業巨擘ZeusLeague+
的不正當商業行爲。
在銀河系有N個已被ZeusLeague+成功打入市場的行星系,不妨標號爲
1,2,...,N。而ZeusLeague+在這N個行星系之間還擁有自己的M個跳躍星門。使
用這些跳躍星門,ZeusLeague+的物資就可以在這N個行星系中兩兩任意互相傳
輸。由於經費問題,跳躍星門的個數不會超過行星系的個數。
露露在頗費周折之後得到了ZeusLeague+在這N個行星系中的各自的貿易總
額C[i]。
萱萱設計了一個經濟學特徵指標D[i]來度量這N個行星系的經濟學特徵。於
是,我們可以用二元組(C[i],D[i])來表示第i個行星系的XP(Xuan's Position)。現
在假設我們有k個行星系的XPs,把它們放置在二維平面上,然後我們用一條直
線去擬合這些XPs。定義一條直線與XPs的相斥度爲這條直線到各個XP的Euclid
距離的平方之和。再令XPs的線性假設相斥度爲所有直線與XPs的相斥度中的
最小者。那麼,這個值越小,ZeusLeague+在這k個行星系中的相互貿易活動就
越可疑,從而值得進一步調查。花花負責計算許多行星系對(u,v)的非可疑度。一
條跳躍星門航線的非可疑度被定義爲它經過的所有行星系(包括起點和終點)的
XPs的線性假設相斥度。而一個行星系對(u,v)的非可疑度則被定義爲所有以u爲
起點,v爲終點的跳躍星門航線的非可疑度中的最小值。一條跳躍星門航線是指
從某個行星系開始,通過跳躍星門依次到達某些行星系,然後終止,並且中途不
重複經過行星系,這樣的一個過程。
花花負責計算許多行星系對(u,v)的非可疑度。一條跳躍星門航線的非可疑度
被定義爲它經過的所有行星系(包括起點和終點)的XPs的線性假設相斥度。
而一個行星系對(u,v)的非可疑度則被定義爲所有以u爲起點,v爲終點的跳躍星
門航線的非可疑度中的最小值。一條跳躍星門航線是指從某個行星系開始,通過
跳躍星門依次到達某些行星系,然後終止,並且中途不重複經過行星系,這樣的
一個過程。
在花花數天夜以繼日的工作之後,平行調查組的你——大名鼎鼎的計算機科
學家Hcceleration.Gerk.Gounce不忍心看到她這樣不眠不休,於是你在完成了手
頭的工作之後決定幫一幫她。
【輸入格式】 
輸入文件inv.in 的第一行是N,M,分別表示這個銀河系內的行星系的個數
以及跳躍星門的個數。
接下來N行,每行2個正整數C[i], D[i],表示第i 個行星系的XP(Xuan's 
Position)。

接下來的M行來描述跳躍星門,每行2個正整數u[i],v[i],表示有一個連接
着行星系u[i]和v[i]的跳躍星門。注意這個連接是無向的。不會存在自己連向自
己的情況。也不會存在重複連接的情況。
接下來的一行,有一個正整數Q,表示花花需要計算的非可疑度的行星對數。
接下來的Q行,每行2個正整數s[i], t[i],表示花花需要計算從s[i]到t[i]的
非可疑度。
【輸出格式】 
輸出文件inv.out總共Q行,每一行一個實數,表示花花第i次需要計算的答
案。你的答案需要和標準答案的差不超過0.01才能得分。
【樣例輸入】 
6 6 
3 4 
5 6 
1 3 
4 4 
3 3 
2 4 
1 2 
1 3 
2 3 
2 4 
3 5 
5 6 

3 6 
2 4 
4 6 
【樣例輸出】 
0.66667 
0.00000 
1.67544
【數據規模與約定】 
提示:我們把行星系抽象成一個點,跳躍星門抽象成一條邊。那麼題目要描
述的是一張邊數不會超過點數的聯通無向圖。

【分析】先直接列出了一個很傻X的方程:

(圖破了,就將就着看下面的第一個式子吧)



然後就不知道應該怎麼辦了,暴力展開?沒什麼用。顯然詢問Q不是喫素的,每次必須轉化爲LGN的算法。

看了網上一篇大牛的題解,當時整個人都不好了——就是暴力 展開。

以下是細節。



太神了!推是很好推,我真正動容的是:那麼多項竟然沒有推錯?!

瞬間就會了。我們維護從根節點到某一個點的上述所有值的和。

(可以開一個結構體,重載+,這樣會方便很多)

先不考慮環的情況。若計算x到y的路徑,設z=LCA(x,y),那麼我們用x、y、z帶出所有項。

然後就是O(1)算出δ的值了。

如果有環,先用並查集或克魯斯卡爾或dfs或bfs求出多出的那條邊的左右兩點。

我們只需分類討論環的左右點和x、y的關係,用同樣的方法求解。

話說我在最後一步的時候還推錯了,囧。

代碼醜,就不放了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章