我崩了啊QAQ
查看原帖
我崩了啊QAQ
307437
brady_liu楼主2020/7/23 16:42

WA的点离标准答案就差零点一。。。

#include<cstdio> 
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
double a[10001][10001],d[10001],x[10001],y[10001],c,maxint=1e10;
double suan(int f,int s)
{
	return sqrt((x[f]-x[s])*(x[f]-x[s])+(y[f]-y[s])*(y[f]-y[s]));
}
int main()
{
	int k;
	cin>>k;
	for(int i=1;i<=k;i++)
	{
		cin>>x[i]>>y[i];
	}
	char r;
	for(int i=1;i<=k;i++)
	{
		for(int j=1;j<=k;j++)
		{
			cin>>r;
			if(r=='1')a[i][j]=suan(i,j);
			else 
			{
				if(i==j)a[i][j]=0;
			    else a[i][j]=maxint;
			}
		}
	}
	for(int o=1;o<=k;o++)
	{
		for(int i=1;i<=k;i++)
		{
			for(int j=1;j<=k;j++)
			{
				a[i][j]=min(a[i][j],a[i][o]+a[o][j]);
			}
		}
	}
	int t;
	double minx=1e20;
	memset(d,0,sizeof(d));
    for(int i=1;i<=k;i++)
	{
		for(int j=1;j<=k;j++)
		{
			if(a[i][j]<maxint-1&&d[i]<a[i][j])d[i]=a[i][j];
		}
	}
	for(int i=1;i<=k;i++)
	{
		for(int j=1;j<=k;j++)
		{
			if(i!=j&&a[i][j]>maxint-1)
			{
			    t=suan(i,j);
				if(minx>d[i]+d[j]+t) minx=d[i]+d[j]+t;	
			}
		}
	}
	for(int i=1;i<=k;i++)
	{
		if(d[i]>minx)minx=d[i];
	}
	printf("%.6lf",minx);
	return 0;
}
2020/7/23 16:42
加载中...