【ybtoj 高效进阶 3.2】【最小生成树】 繁忙都市
题目
解题思路
prim模板题
解释在这里
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,x,y,ans,maxn,f[320],p[320],a[320][320];
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
scanf("%d",&a[x][y]);
a[y][x]=a[x][y]; //无向边
}
memset(f,0x7f,sizeof(f));
f[1]=0;
memset(p,0,sizeof(p)); //赋初值
for (int i=1;i<=n;i++)
{
int k=0;
for (int j=1;j<=n;j++)
if (!p[j]&&f[j]<f[k])
k=j; //找最短边
p[k]=1;
maxn=max(maxn,f[k]);
for (int j=1;j<=n;j++)
if (!p[j]&&a[k][j]<f[j]&&a[k][j]!=0) //更新到这个点的最短距离
f[j]=a[k][j];
}
cout<<n-1<<" "<<maxn<<endl;
return 0;
}