Vou assumir que você não recebe arestas negativas ponderadas, porque isso pode não funcionar se houver pesos negativos.
Algoritmo
Para cada uma das suas arestas, identifique-as de a n1n
Deixe peso Um número de borda iaii
Seja peso B do número da aresta ibii
Elabore esta tabela
|a_1 a_2 a_3 a_4 .. a_n
---+-------------------------
b_1|.........................
b_2|.........................
. |.........................
. |.........................
b_n|...................a_n * b_n
Com cada um dos elementos da tabela sendo o produto de linha e coluna.
Para cada aresta, some a linha e a coluna relevantes da tabela (e lembre-se de remover o elemento na interseção, pois ele foi somado duas vezes).
Encontre a aresta que possui a maior soma e exclua-a se não desconectar o gráfico. Marque a borda como essencial caso contrário. Se uma aresta foi excluída, preencha suas linhas e colunas com 0.
Correção
O resultado é obviamente uma árvore.
O resultado está obviamente se estendendo desde que nenhum vértice está desconectado.
O resultado é mínimo? Se houver outra borda cuja exclusão criará uma árvore de abrangência menor no final do algoritmo, essa borda será excluída e anulada primeiro. (se alguém pudesse me ajudar a tornar isso um pouco mais rigoroso / e / ou contra-exemplo, isso seria ótimo)
Tempo de execução
Obviamente polinomial em .|V|
editar
nãoéum exemplo contrário.(2,11),(11,2),(4,6)
a1=2,a2=11,a3=4
b1=11,b2=2,b3=6
Então
| 2 11 4
---+--------------------
11 | 22 121 44
2 | 4 22 8
6 | 12 66 24
(4,6)(2,11)(11,2)=44+8+24+66+12=154=22+4+12+121+44=203=121+22+66+4+8=221
é removido.(11,2)
Termine com (2,11),(4,6)=6∗17=102
Outras árvores abrangidas são
(11,2),(4,6)=15∗12=180
(2,11),(11,2)=13∗13=169