簡體   English   中英

圖論算法

[英]Graph Theory Algorithm

給定的問題是

給定一個具有n個頂點的森林,請添加邊以使其成為直徑最小的樹。 我嘗試了許多方法,但沒有一個通過系統測試用例。請提出一些算法來解決此問題。

這是社論ncpc.idi.ntnu.no/ncpc2015/ncpc2015slides.pdf的鏈接。問題名稱為Adjoin the Networks。 我無法理解社論中提供的解決方案

更新:

https://www.quora.com/What-is-the-solution-for-Dreaming-on-IOI-2013

該鏈接為社論中提到的解決方案提供了最佳解釋

頂點v的偏心率表示為ecc(v) ,定義為ecc(v):=max_u d(u,v) ,即到圖中最遠頂點的距離。 曲線圖G 中心ecc(v)=min_v max_u d(u,v)任何頂點v ,即中心是使偏心率最小的頂點。

如果合並兩棵樹(來自不同的連接組件) T1T2 ,通過在它們的中心c1c2之間放置一條邊,您將得到一棵樹T ,其diam T = max(diam T1, diam T2, 1+rad(T1)+rad(T2))

從這些屬性可以明顯看出以下方法的正確性。

這是該算法的一個主意,讓我無所適從:

  • T1T2 ,..., Tk為組成森林的樹木。
  • 計算每個樹木Ti中心頂點 ci
  • 通過以智能方式在中心之間放置邊緣來連接組件。

當然,現在的問題是如何巧妙地解決最后一個問題。 直觀地,我建議您先將直徑最大的treest連接起來(然后更新新樹的直徑並計算新樹的中心)。 也許是這樣的:

優先級隊列包含一個以上的樹

  • T1T2為最大直徑的樹木; c1c2為中心;
  • 連接c1c2形成新樹T ;
  • 計算T的新中心c ,計算diam T並將T放回優先級隊列(可以是使用直徑作為鍵的最大堆)。

完成

更新。 我不確定是先加入大直徑樹還是反過來(即先加入最小直徑樹)。 但是現在很容易做一個草圖證明(一旦您弄清楚要走的路),證明這是正確的路。

更新。 如果您首先連接最大的模塊,則數學當然會通過(如PDF中所建議)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM