挺简单一个题,可惜当时没想到,有点巧妙丫!

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 255
using namespace std;
char list[maxn][maxn];
double map[maxn][maxn];
int vis[maxn];
int ins[maxn];
int n, m;
struct Node {
double x;
double y;
double len;
}que[maxn];
double get(Node a, Node b) {
return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));
} int dfs(int x, int num) {
ins[x] = num;
vis[x] = 1;
for (int i = 0; i < n; i++) {
if (!vis[i] && list[x][i] == '1') dfs(i, num);
}
return 0;
}
void floyd() {
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
}
}
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lf %lf", &que[i].x, &que[i].y);
}
for (int i = 0; i < n; i++) {
scanf("%s", list[i]);
} for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (list[i][j] == '0') map[i][j] = 1100000.0;
else map[i][j] = get(que[i], que[j]);
}
}
for (int i = 0; i < n; i++) map[i][i] = 0.0;
floyd();
int cnn = 0;
for (int i = 0; i < n; i++) {
if (!vis[i]) {
cnn++;
dfs(i, cnn);
}
}
for (int i = 0; i < n; i++) {
que[i].len = 0;
for (int j = 0; j < n; j++) {
if (ins[i] == ins[j]) {
double len = map[i][j];
que[i].len = max(que[i].len, len);
}
}
}
double ans = 1100000; for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (ins[i] != ins[j]) {
double len = get(que[i], que[j]);
len += que[i].len + que[j].len;
ans = min(ans, len);
}
}
}
for (int i = 0; i < n; i++) {
ans = max(que[i].len, ans);//特殊情况,原图自己就已经够大的了,没必要再加了
} printf("%.6lf\n", ans);
return 0;
}

  

最新文章

  1. Spring MVC学习笔记——文件上传
  2. 使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
  3. [Android界面] 如何 去掉dialog的黑色背景和边框 DEMO
  4. Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯
  5. 《javascript高级程序设计》 第25章 新兴的API
  6. SQL Server 基础:Join用法
  7. LeetCode Excel Sheet Column Title (输出excel表的列名称)
  8. 编译并使用Lua语言
  9. SQL Server调优系列基础篇 - 并行运算总结(二)
  10. BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系(转)
  11. CodeSmith exclude global 文件和文件夹问题 与 输入中文显示乱码问题
  12. java基础第二天
  13. 页面加载的时候自动的执行js代码
  14. Docker学习笔记 - 创建私有的镜像仓库
  15. VueJs(4)---V-model指令
  16. jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态
  17. C++编程音视频库ffmpeg的pts时间换算方法
  18. Nginx的正向代理与反向代理详解
  19. asp.net mvc5中使用Swagger 自动生成WebApi文档笔记
  20. 洛谷 P1141【BFS】+记忆化搜索+染色

热门文章

  1. Kubernetes1.4新特性前瞻:设置JOB执行计划
  2. mybatis多排序问题
  3. 突然想起一个有趣的问题:FAT32&amp;NTFS?
  4. ImportError: No module named libqt_gui_cpp_shiboken
  5. Libev源码分析07:Linux下的eventfd简介
  6. 【转载】字符编码笔记:ASCII,Unicode和UTF-8
  7. 模板—插头dp(Ural 1519 Formula 1)
  8. saltStack_template
  9. Spark-shell批量命令执行脚本
  10. JVM基础--JVM参数之堆栈空间配置