[Ejemplo 2 del Capítulo 11 de Ybtoj] Un nuevo comienzo [Árbol de expansión mínimo]

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210327081220543.png)

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí


Ideas para resolver problemas

No sabía cómo lidiar con la parte de construir una central eléctrica, y luego miré las ideas para resolver problemas y lamenté que era realmente bueno. .

Realmente un remilgadop r i m pregunta de plantilla, conjunto0 0El nodo 0 es una superfuente de energía. Construir una central eléctrica en la mina equivale a hacerlo y0 0El nodo 0 está conectado al borde. La pregunta se convierte para hacer0 n 0 ~ n0  El costo de conectar el nodo n .


Código

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<bitset>
using namespace std;

int n,ans,w[310],a[310][310],dis[310],v[310];

int main(){
    
    
	scanf("%d",&n);
	for(int i=1;i<=n;i++)	
		scanf("%d",&a[1][i+1]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%d",&a[i+1][j+1]);
	memset(dis,0X7f,sizeof(dis));
	dis[1]=0; 
	for(int i=1;i<=n+1;i++)
	{
    
    
		int k=0;
		for(int j=1;j<=n+1;j++)
		{
    
    
			if(!v[j]&&dis[j]<dis[k])
				k=j;
		}
		if(!k)
			break;
		v[k]=1;
		ans+=dis[k];
		for(int j=1;j<=n+1;j++)
		{
    
    
			if(a[k][j]<dis[j])
				dis[j]=a[k][j];
		}
	}
	printf("%d",ans);
}

Supongo que te gusta

Origin blog.csdn.net/kejin2019/article/details/115263312
Recomendado
Clasificación