1 solutions
-
0
C++ :
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; double f[151][151],m[151],minx,r,temp,x[151],y[151],maxint=1e12; double dist(int i,int j) { return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } int main() { int i,j,n,k; char c; cin >> n; for (i = 1; i <= n; i++) { cin >> x[i] >> y[i]; } for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) { cin >> c; if(c=='1') { f[i][j]=dist(i,j); } else { f[i][j]=maxint; } } for(k = 1; k <= n; k++) for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) if(i!=j && i!=k && j!=k) if(f[i][k]<maxint-1 && f[k][i]<maxint-1) if(f[i][j]>f[i][k]+f[k][j]) f[i][j]=f[i][k]+f[k][j]; memset(m,0,sizeof(m)); for(i=1;i<=n;i++) for(j=1;j<=n;j++) if((f[i][j]<(maxint-1))&&(m[i]<f[i][j])) m[i]=f[i][j]; minx=1e20; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if(i!=j && f[i][j]>maxint-1) { temp=dist(i,j); if(minx>m[i]+m[j]+temp)minx=m[i]+m[j]+temp; } r=0; for (i = 1; i <= n; i++) if(m[i]>minx) minx=m[i]; printf("%0.6lf",minx); return 0; }
- 1
Information
- ID
- 579
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By