玄关40pts,hack也没过
查看原帖
玄关40pts,hack也没过
1014558
_tan_tie_楼主2025/6/22 16:42
#include<bits/stdc++.h>
using namespace std;
double v[160][160];
double d[160][160],m[160];
double x[160],y[160],n;
int dist(int i,int j)
{
	return sqrt((x[i]-x[j])*(x[i]-x[j])*1.0+(y[i]-y[j])*(y[i]-y[j])*1.0);
}
void floyd()
{
	
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
	double minx=1e20;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(d[i][j]<1e12-1)
				m[i]=max(m[i],d[i][j]);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i!=j&&d[i][j]>1e12-1)
			{
				double tmp=1.0*dist(i,j);
				minx=min(minx,m[i]+m[j]+tmp);
			}
		}
	}
	for(int i=1;i<=n;i++)
		if(minx<m[i])
			minx=m[i];
	printf("%.6lf",minx);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		scanf("%lf%lf",x+i,y+i);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			char c;
			cin>>c;
			if(c=='1')
				d[i][j]=dist(i,j)*1.0;
			else
				d[i][j]=1e12;
	}
	floyd();
	return 0;
}

马蜂优良

2025/6/22 16:42
加载中...