题目描述
FJ 已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。每两个农场间的距离不会超过 10^5。
巨水的最小生成树模板题,直接敲一个 prim 算法就行了。
code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#define inf 700000000
using namespace std;
int n,t[110],w[110][110],mst,bo[110],k;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>w[i][j];
memset(t,0x7f,sizeof(t));
t[1]=0;
for(int i=1;i<=n;i++)
{
k=0;
for(int j=1;j<=n;j++)
if(!bo[j]&&(t[j]<t[k]))
k=j;
bo[k]=1;
for(int j=1;j<=n;j++)
if(!bo[j]&&(w[k][j]<t[j]))
t[j]=w[k][j];
}
for(int i=1;i<=n;i++)
mst+=t[i];
cout<<mst;
return 0;
}
题解 洛谷P1546 [USACO3.1]最短网络 Agri-Net
原文:https://www.cnblogs.com/Akn-Wind/p/12660192.html