2021“MINIEYE杯”中国大学生算法设计超级联赛(8)1003. Ink on paper(裸最小生成树)
Problem Description
Bob accidentally spilled some drops of ink on the paper. The initial position of the i-th drop of ink is (xi,yi), which expands outward by 0.5 centimeter per second, showing a circle.
The curious Bob wants to know how long it will take for all the inks to become connected. In order to facilitate the output, please output the square of the time.
Input
The first line of input contains one integer T(1≤T≤5), indicating the number of test cases.
For each test case, the first line contains one integer n(2≤n≤5000), indicating the number of ink on the paper.
Each of the next n lines contains 2 integers (xi,yi)(|xi|≤109,|yi|≤109), indicating that x and y coordinates of the ink.
Output
For each test case, output one line containing one decimal, denoting the answer.
Sample Input
2
3
0 0
1 1
0 1
5
1 1
4 5
1 4
2 6
3 10
Sample Output
1
17
就是求最小生成树的最大边。由于输出的是时间的平方,且两个圆扩散的速度分别为0.5,这样两圆相遇的时间实际上就是两个点的边权值。因为输出的是时间的平方所以答案就限制在了整数域里。注意即使一棵树有多棵最小生成树,但最大边的边权值是一样的。这个题n为5e3且为完全图,自然选择prim,常数大的kruscal必然会超时。一开始还写了一波二分+并查集想必也是会t...注意极限数据范围已经大于1e18了,inf必须要设置为9e18或者用__int128才可以(比赛的时候没注意wa了一发
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,x[5005], y[5005];
int a[5005][5005], d[5005];
bool v[5005];
void prim()
{
for(int i = 0; i <= n; i++) v[i] = 0;
for(int i = 1; i <= n; i++) d[i] = 9e18;
d[1] = 0;
int mx = 0;
for(int i = 1; i < n; i++) {
int x = 0;
for(int j = 1; j <= n; j++)
{
if(!v[j] && (x == 0 || d[j] < d[x])) {
x=j;
}
}
v[x]=1;
for(int y = 1; y <= n; y++)
{
if(!v[y]) {
d[y] = min(d[y], a[x][y]);
}
}
}
for(int i = 1; i <= n; i++) mx = max(mx, d[i]);
printf("%lld\n", mx);
}
signed main()
{
int t;
scanf("%lld", &t);
while(t--) {
scanf("%lld", &n);
for(int i = 1;i <= n; i++) {
scanf("%lld%lld", &x[i], &y[i]);
}
for(int i = 1; i <= n; i++) {
for(int j=i;j<=n;j++) {
a[i][j] = a[j][i] = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
}
}
prim();
}
return 0;
}
原文地址:https://www.cnblogs.com/lipoicyclic/p/15134855.html
- ggolot2 画ROC曲线
- 47. 访问MySql数据库实现增删改查 | 厚土Go学习笔记
- 39. channel管道 | 厚土Go学习笔记
- springmvc学习第二天
- 厚土Go学习笔记 | 38. goroutine轻量级线程
- 厚土Go学习笔记 | 37. 图片(image)生成器
- 编写地道的Go代码
- 开发你不能忽略的问题?JavaScript(JS)
- 厚土Go学习笔记 | 36. web服务指定路径下的get参数接收与处理
- 用R进行文本分析初探——包含导入词库和和导入李白语句
- Golang事务模型
- 厚土Go学习笔记 | 35. web服务器实现动态路径
- 过滤器Filter精华知识点,怎能不看
- JavaMail开发示例,学习要看对资料
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 三种动态控制SAP CRM WebClient UI assignment block显示与否的方法
- TCGA数据库中癌症名称缩写
- CloudFlare自定义节点优化网站
- 什么是SSL?为什么要为WordPress网站使用SSL?
- R语言再保险合同定价案例研究
- SAP CRM附件的技术属性设计原理
- R语言对混合分布中的不可观测与可观测异质性因子分析
- R替换函数gsub
- R语言泊松回归对保险定价建模中的应用:风险敞口作为可能的解释变量
- asp dotnet core 提供大文件下载的测试
- R语言模拟人类生活预期寿命动态可视化动画图gif
- Python遍历字典
- R语言随机森林模型中具有相关特征的变量重要性
- WPF 使用 Direct Manipulation 的方法
- R语言分析负利率下金融市场:负利率和年金价值的变化