100pts WA#11
查看原帖
100pts WA#11
444195
caramel_qwq楼主2023/7/26 15:36

rt,代码如下

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n;
double dis[158];
double a[158][158];
int x[158],y[158];
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>x[i]>>y[i];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			char c;
			cin>>c;
			if(c=='1'){
				a[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
			}else{
				if(i!=j) a[i][j]=INF;
			}
		}
	}
	for(int k=0;k<n;k++){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(i!=j&&i!=k&&j!=k&&a[i][k]+a[k][j]<a[i][j]){
					a[i][j]=a[i][k]+a[k][j];
					a[j][i]=a[i][j];
				}
			}
		}
	}
	double M=0,M2=INF;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(a[i][j]!=INF){
				dis[i]=max(dis[i],a[i][j]);
			}
		}
		M=max(dis[i],M);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(a[i][j]==INF&&i!=j){
				M2=min(M2,dis[i]+dis[j]+sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));
			}
		}
	}
	printf("%.6lf\n",max(M,M2));
	return 0;
}
2023/7/26 15:36
加载中...