求大佬指点
查看原帖
求大佬指点
223103
苏幕遮楼主2021/7/28 22:50
//LG P2872
#include<bits/stdc++.h>
using namespace std;
const int INF=0x7fffffff/2;
long long ans;
int n,m,tx,ty;
bool vst[1005];
int x[1005],y[1005];
int u[1005],v[1005];
double w[1005][1005],d[1005];
void prim(int v0)
{
	int k,t;
	for (int i=1;i<=n;i++)
	{
		d[i]=INF;
	}
	d[v0]=0;
	
	for (int i=1;i<=n;i++)
	{
		k=INF;
		for (int j=1;j<=n;j++)
		{
			if (vst[i]==0&&k>d[j])
			{
				k=d[j];
				t=j;	
			}	
		}
		vst[t]=1;
		ans+=d[t];
		for (int j=1;j<=n;j++)
		{
			if(vst[j]==0&&d[j]>w[k][j])
			{
				d[j]=w[k][j];
			}
		}
	} 
}
int main()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i];
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		{
			w[i][j]=INF;
		}
	}
	for (int i=1;i<=m;i++)
	{
		cin>>u[i]>>v[i];
		tx=x[u[i]]-x[v[i]];
		ty=y[u[i]]-y[v[i]];
		w[u[i]][v[i]]=sqrt(tx*tx+ty*ty);
		w[v[i]][u[i]]=w[u[i]][v[i]];
	}
	prim(1);
	cout<<ans<<endl;
	return 0;
}

不知道哪错了,谢谢大佬指点。

2021/7/28 22:50
加载中...