Highways

Highways

https://vjudge.net/contest/477987#problem/J

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int inf=0x3f3f3f;
double cmap[755][755],d[755],x[755],y[755];
int c[755],n,pre[755],q[1005][1005];
void prim()
{
	cmap[1][1]=inf;
	for(int i=1;i<=n;i++)
	{
		d[i]=cmap[1][i];//cout<<d[i]<<endl;
		pre[i]=1;
	}
	c[1]=1;
	for(int i=1;i<=n;i++)
	{
		int u=-1;
		double cmin=inf;
		for(int j=1;j<=n;j++)
		{
			if(c[j]==0&&d[j]<cmin)
			{
				u=j;
				cmin=d[j];
			}
		}
		if(u==-1)continue;
		c[u]=1;
		if(q[pre[u]][u]==0)cout<<pre[u]<<" "<<u<<endl;
		for(int j=1;j<=n;j++)
		{
			if(c[j]==0&&d[j]>cmap[u][j])
			{
				pre[j]=u;
				d[j]=cmap[u][j];//cout<<u<<" "<<j<<" "<<d[j]<<endl;
			}
		}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>x[i]>>y[i];
	memset(c,0,sizeof(c));
	memset(cmap,inf,sizeof(cmap));
	memset(q,0,sizeof(q));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i==j)continue;
			double k=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
			cmap[i][j]=cmap[j][i]=k;
		}
	}
	int m;
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		int a,b;
		cin>>a>>b;q[a][b]=q[b][a]=1;
		cmap[a][b]=cmap[b][a]=0;
	}
	prim();
}

 

posted @ 2022-02-10 19:26  是橙橙吖  Views(72)  Comments(0)    收藏  举报