洛谷p-1522又是Floyd
2024-10-08 04:25:09
挺简单一个题,可惜当时没想到,有点巧妙丫!
#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;
}
最新文章
- Spring MVC学习笔记——文件上传
- 使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。
- [Android界面] 如何 去掉dialog的黑色背景和边框 DEMO
- Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯
- 《javascript高级程序设计》 第25章 新兴的API
- SQL Server 基础:Join用法
- LeetCode Excel Sheet Column Title (输出excel表的列名称)
- 编译并使用Lua语言
- SQL Server调优系列基础篇 - 并行运算总结(二)
- BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系(转)
- CodeSmith exclude global 文件和文件夹问题 与 输入中文显示乱码问题
- java基础第二天
- 页面加载的时候自动的执行js代码
- Docker学习笔记 - 创建私有的镜像仓库
- VueJs(4)---V-model指令
- jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态
- C++编程音视频库ffmpeg的pts时间换算方法
- Nginx的正向代理与反向代理详解
- asp.net mvc5中使用Swagger 自动生成WebApi文档笔记
- 洛谷 P1141【BFS】+记忆化搜索+染色
热门文章
- Kubernetes1.4新特性前瞻:设置JOB执行计划
- mybatis多排序问题
- 突然想起一个有趣的问题:FAT32&;NTFS?
- ImportError: No module named libqt_gui_cpp_shiboken
- Libev源码分析07:Linux下的eventfd简介
- 【转载】字符编码笔记:ASCII,Unicode和UTF-8
- 模板—插头dp(Ural 1519 Formula 1)
- saltStack_template
- Spark-shell批量命令执行脚本
- JVM基础--JVM参数之堆栈空间配置