hack不过求调
查看原帖
hack不过求调
1390795
Black_Jr楼主2025/8/3 11:40
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int n;
bool w[155][155];
double dis[155][155],g[155],maxm=-1;
vector< pair<int,int> >xy;
double cal(pair<int,int> a,pair<int,int> b){
	int c=a.first-b.first,d=a.second-b.second;
	return sqrt(c*c+d*d);
}
int main() {
	cin>>n;
	for(int i=0;i<n;i++){
		int x,y;
		cin>>x>>y;
		xy.push_back(make_pair(x,y));
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			char c;
			cin>>c;
			if(c=='1') dis[i][j]=cal(xy[i-1],xy[j-1]);
			else dis[i][j]=inf;
		}
	}  
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
			}
		}
	} 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dis[i][j]!=inf && i!=j){
				g[i]=max(g[i],dis[i][j]);
				maxm=max(maxm,g[i]);
			}
		}
	}
	double ans=inf;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dis[i][j]==inf && i!=j){
				double t=g[i]+g[j]+cal(xy[i-1],xy[j-1]);
				ans=min(t,ans);
			}
		}
	}
	printf("%.6f",max(maxm,ans));
    return 0;
}

2025/8/3 11:40
加载中...