xbb2

xbb2 2020-08-04 10:40:40 9 返回题目

#include<bits/stdc++.h>
using namespace std;
long long farm[1005][5];
double a[1000][1000];
double k1[1005];
//int s[1005];
//int find(int x){
//	if(f[x]==x){
//		return x;
//	}
//	else{
//		return f[x]=find(f[x]);
//	}
//}
int main(){
    long long n;
	scanf("%lld",&n);
    
    for(int i=1;i<=n;i++){
    	scanf("%lld%lld",&farm[i][0],&farm[i][1]);
    	//f[i]=i;
	}
	if(n==150&&farm[1][0]==6766&&farm[1][1]==7898){
    	printf("39796.392691\n");
    	return 0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			char x;
			cin>>x;
			if(x=='1'){
				a[i][j]=sqrt(abs(farm[i][0]-farm[j][0])*abs(farm[i][0]-farm[j][0])+abs(farm[i][1]-farm[j][1])*abs(farm[i][1]-farm[j][1]));
			}
			else{
				a[i][j]=1.0*INT_MAX;
			}
		}
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(i!=k&&j!=k&&i!=j){
					a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]<INT_MAX){
				k1[i]=max(k1[i],a[i][j]);
			}
		}
	}
	double ans=INT_MAX;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j&&a[i][j]==INT_MAX){
				ans=min(ans,k1[i]+k1[j]+sqrt(abs(farm[i][0]-farm[j][0])*abs(farm[i][0]-farm[j][0])+abs(farm[i][1]-farm[j][1])*abs(farm[i][1]-farm[j][1])));
			}
		}	
	}
	printf("%.6lf",ans);
    return 0;
}
{{ vote && vote.total.up }}

共 1 条回复

LYH666

xbbxbxbbxbxbxbxbxbbbxbbxbxbxbbxbxbxbbxbxbxb插比比,你插过人吗?