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 条回复
xbbxbxbbxbxbxbxbxbbbxbbxbxbxbbxbxbxbbxbxbxb插比比,你插过人吗?