100pts WA#11什么原因 代码如下
查看原帖
100pts WA#11什么原因 代码如下
1121403
lk_er楼主2024/5/3 18:06
#include <bits/stdc++.h>
using namespace std;
int n,m;
const int N=160;
double r1,r2,m1,x[N],y[N],a[N][N],b[N];
char ch;
void floyed()
{
    for(int k=1;k<=n;k++)
     	for(int i=1;i<=n;i++)
      		for(int j=1;j<=n;j++)
       			if(i!=j&&j!=k&&i!=k&&a[i][j]>a[i][k]+a[k][j])
        			a[i][j]=a[i][k]+a[k][j];
}
int main()
{
    cin>>n;
    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++)
      	{
        	cin>>ch;
        	a[i][j]=0x3f3f3f3f;
        	if(ch=='1')
        	a[j][i]=a[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
      	}
	floyed();
    for(int i=1;i<=n;i++)
    {
        m1=0;
        for(int j=1;j<=n;j++)
         	if(a[i][j]>m1&&a[i][j]!=0x3f3f3f3f)m1=a[i][j];
        b[i]=m1;
        r1=max(r1,b[i]);
    }
    r2=0x3f3f3f3f;
    for(int i=1;i<=n;i++)
     	for(int j=1;j<=n;j++)
      		if(a[i][j]==0x3f3f3f3f&&i!=j)
       			r2=min(r2,b[i]+b[j]+sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));
    printf("%.6lf",max(r1,r2));
}
2024/5/3 18:06
加载中...