#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn=100100;
const double INF=100000000;
double dp[110][50];
double dist(double x1,double y1,double x2,double y2){
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
struct sp{
int num;
double x[50],y[50];
}p[110];
int main(){
// freopen("F:\\123.txt","r",stdin);
int n,m,uu,vv;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
scanf("%d",&p[i].num );
for(int j=0;j<p[i].num ;j++){
scanf("%lf%lf",&p[i].x[j],&p[i].y[j] );
}
}
p[n+1].num=p[1].num ;
for(int j=0;j<p[1].num;j++){
p[n+1].x[j]=p[1].x[j] ;
p[n+1].y[j]=p[1].y[j] ;
}
double res=INF;
for(int u=0;u<p[1].num;u++){ //枚举起点
for(int i=1;i<=n;i++){ //初始化INF
for(int j=0;j<=50;j++){
dp[i][j]=INF;
}
}
dp[1][u]=0; //起点 绳长为 zero;
for(int i=2;i<=n;i++){
for(int j=0;j<p[i].num;j++){
for(int k=0;k<p[i-1].num;k++){
dp[i][j]= min(dp[i][j],dp[i-1][k]+dist(p[i-1].x[k],p[i-1].y[k],p[i].x[j],p[i].y[j]));
}
}
}
// 首尾要相连
for(int j=0;j<p[n].num;j++){
res=min(res,dp[n][j]+dist(p[n].x[j],p[n].y[j],p[1].x[u],p[1].y[u]));
}
}
printf("%d\n",(int)(res*100));
}
return 0;
}
poj 2137 Cowties
最新推荐文章于 2019-06-01 23:25:51 发布