1 solutions
-
-1
#include<iostream> #include<cstring> #include<cmath> #define INF 0x3f3f3f3f using namespace std; double mapp[200][200]; double mdis[200]; int n,x[1001],y[1001]; double f(int x1,int y1,int x2,int y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } int main(){ cin>>n; for(int i=1;i<=n;i++) scanf("%d%d",x+i,y+i); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ char c; cin>>c; mapp[i][j]=mapp[j][i]=c=='1'||i==j?f(x[i],y[i],x[j],y[j]):INF; } } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mapp[i][j]=min(mapp[i][j],mapp[i][k]+mapp[k][j]); memset(mdis,0,sizeof(mdis)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(mapp[i][j]<INF&&(mapp[i][j]>mdis[i])) mdis[i]=mapp[i][j]; double minn=INF; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(mapp[i][j]==INF&&(mdis[i]+mdis[j]+f(x[i],y[i],x[j],y[j])<minn)) minn=mdis[i]+mdis[j]+f(x[i],y[i],x[j],y[j]); for(int i=1;i<=n;i++) minn=max(minn,mdis[i]); printf("%.6lf",minn); return 0; }
- 1
Information
- ID
- 828
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 7
- Accepted
- 4
- Uploaded By