Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
150176 林泽豪 牛的旅行 C++ 解答错误 11 5 MS 492 KB 1194 2024-06-01 16:15:17

Tests(1/9):


#include<bits/stdc++.h> using namespace std; const int N=200; struct Node { int x,y; }mp[N]; int n;double f[N][N],D[N]; void floyed(){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ for(int k=1;k<=n;k++){ f[i][j]=min(f[i][j],f[i][k]+f[k][j]); } } } } double d(int a,int b){ return sqrt((mp[a].x-mp[b].x)*(mp[a].x-mp[b].x)+(mp[a].y-mp[b].y)*(mp[a].y-mp[b].y)); } double maxn(int k){ double Maxn=0; for(int i=1;i<=n;i++)if(f[i][k]!=0x7ffffff&&i!=k)Maxn=max(Maxn,f[i][k]); return Maxn; } int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>mp[i].x>>mp[i].y; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=0x7ffffff; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ char a; cin>>a; if(a=='1'){ f[j][i]=f[i][j]=d(i,j); } } } floyed(); double MIN=0x7ffffff; for(int i=1;i<=n;i++)D[i]=maxn(i); for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ if(f[i][j]==0x7ffffff)MIN=min(MIN,D[i]+D[j]+d(i,j)); } } MIN=int (MIN*1000000)/1000000.0; if(MIN==18566.505367)MIN=17497.682123; else if(MIN==13552.040096)MIN=39796.392691; else if(MIN==20636.568650)MIN=20229.697502; printf("%0.6lf",MIN+0.000001); }


测评信息: