样例过不了,哪个大佬帮忙看看,谢谢
查看原帖
样例过不了,哪个大佬帮忙看看,谢谢
208161
penghongxiang楼主2022/2/26 20:48
#include<bits/stdc++.h>
using namespace std;
const int maxn=160;
int n,cnt=0;
double dis[maxn][maxn],zj[maxn],ans=1e20,sum,zy[maxn];
bool bl[maxn][maxn];
char tl[maxn];
struct wz
{
	int x,y,id;
}a[maxn];
double qz(int i,int j)
{
	return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
}
void dg(int t,int q)
{
	a[t].id=q;
	for(int i=1;i<=n;i++)
	{
		if(bl[t][i]&&a[i].id==0)
		{
			dg(i,q);
		}
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i].x,&a[i].y);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%s",tl);
		for(int j=1;tl[j-1];j++)
		{
			if(tl[j-1]=='1')
			{
				dis[i][j]=qz(i,j);
				bl[i][j]=true;
			}
			else
			{
				dis[i][j]=1e20;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i].id==0)
		{
			cnt++;
			dg(i,cnt);
		}
	}
	for(int k=1;k<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				if(dis[i][j]>dis[i][k]+dis[j][k])
				{
					dis[i][j]=dis[i][k]+dis[j][k];
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		zy[i]=-1.0;
		for(int j=1;j<=n;j++)
		{
			if(bl[i][j])
			{
				zy[i]=max(zj[i],dis[i][j]);
			}
		}
		zj[a[i].id]=max(zj[a[i].id],zy[i]);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(a[i].id!=a[j].id)
			{
				sum=max(max(zj[i],zj[j]),qz(i,j)+zy[i]+zy[j]);
				ans=min(sum,ans);
				printf("%lf %lf\n",sum,ans);
			}
		}
	}
	printf("%.6lf",ans);
	return 0;
}

谢谢dalaoQWQ

2022/2/26 20:48
加载中...