Prim的神奇最后一点
查看原帖
Prim的神奇最后一点
723198
AAA404楼主2022/9/23 18:11

rt,本来应该去好好刷普及的题的,结果洛谷推荐这个,就写了一下,最后一个点不行

#include<bits/stdc++.h>
#define itn int
#define tin int
#define nit int
#define tni int
#define nti int
#define scnaf scanf
#define ptrinf printf
#define icn cin
#define cni cin
#define inc cin
#define nci cin
#define nic cin
#define cuot cout
#define ocut cout
#define fro for
using namespace std;
int n,m,f[5001],g[5001][5001],ans=0;
bool b[5001];
int main()
{
 //	freopen(".in","r",stdin);
 //	freopen(".out","w",stdout);
 	cin>>n>>m;
 	memset(g,0x3f,sizeof g);
 	for(int i=1;i<=n;i++)g[i][i]=0;
 	for(int i=1;i<=m;i++)
 	{
 		int x,y,z;
 		cin>>x>>y>>z;
 		g[x][y]=min(z,g[x][y]);
 		g[y][x]=min(z,g[y][x]);
	}
	for(int i=1;i<=n;i++)
	f[i]=g[1][i];
	b[1]=1;
	for(int i=1;i<=n-1;i++)
	{
		int minn=0x3f3f3f3f,minl;
		for(int j=1;j<=n;j++)
		{
			if(!b[j] && f[j]<minn)
			{
				minn=f[j];
				minl=j;
			}
		}
		b[minl]=1;
		ans+=f[minl];
		for(int j=1;j<=n;j++)
		{
			if(!b[j] && g[minl][j]<f[j])
			f[j]=g[minl][j];
		}
	}
	if(ans==0)cout<<"orz";
	else
	cout<<ans;
 	return 0;
}

2022/9/23 18:11
加载中...