Choose arbitrary r
Calculate size(u) for all nodes
sum = 0
for each edge (u,v) do:
sum = sum + (cost(u,v) * (size(v) * (n-size(v))))
return sum
、max(p)
とmin(p)
、それが通過する道路の最大値と最小コストを表すものとします。その後sum for all path p max(p)
は、あなたがエッジe
を挿入
Let G=(V,E) be the input graph, which should be a tree
Create a graph G' with vertices set V and no edges
Insert every edge in E to G' from lowest cost to hightest cost
毎回、以下の方法により求めることができるTotal_cost = sum for all path p [max(p) - min(p)]
その後、それは二つの成分S, T
を接続すると、あなたはS
からT
にすべてのパスp
のためにそれを見ることができます、max(p) = cost(e)
sum for all path p max(p)
を合計すると見つかります。 2つのコンポーネントを効率的に接続するには、Kruskalのアルゴリズムのアイデアを使用できると思います。
同様に、sum for all path p min(p)
と最後に総費用を見つけることができます。
グラフはツリーであり、各辺は、各辺の頂点の数の積に等しい数のパスにあります。 – Dave
は、両方とも最初はゼロであったmax_totalとmin_totalを追跡します。グラフの最大ウェイトエッジとそのウェイが出現するパスの数を求めます。max_totalに商品を追加し、エッジを削除して、繰り返します(それぞれがグラフを分割します)。最小エッジ重量のためにプロセスを繰り返します。 max_totalは、最大エッジ重みのパス間の合計で、minと同じです。違いはあなたの答えです。 – Dave
コンポーネントを2で分割するたびにO(サイズ(コンポーネント))なので、最悪のランタイムは(分割数)*(分割されるコンポーネントのサイズ)<= N^2です。それは素晴らしいことではありませんが、あなたは10kノードしか持たないので、十分に良いはずです。あなたはもっと速いものが必要ですか? – Dave