【HDOJ7058】Ink on paper(生成树,或二分答案建图+并查集联通性)
1003 Ink on paper
题意:
- 给出平面中的n个点,每个点每秒向外扩散0.5cm,求多少时间后所有点的点会连在一起,输出时间的平方。
思路:
- 其实是很简单的最小生成树板子,Kruskal或Prim都行大概O(nlogn),但是比赛的时候没想到。
- 然后写了个二分答案,二分时间的平方,每次n^2枚举所有的点对建图,并查集维护联通性check时间是否可行,复杂度大概O(n^2logn),防止超时可以提前预处理出所有点对之间的距离,避免每次重新算一遍。
- 开始用 double 二分的,精度一直WA,后来直接long long 二分时间的平方就过了。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 5050;int fa[maxn+10];
void init(int n){for(int i = 1; i <= n; i++)fa[i]=i;}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void merge(int x, int y){x=find(x);y=find(y);if(x!=y)fa[x]=y;}LL n, d[maxn][maxn];
struct node{LL x, y; }a[maxn];
LL getd(node x, node y){return (x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y);}
bool check(LL t){init(n);int cnt = 1;for(int i = 1; i <= n; i++){for(int j = i+1; j <= n; j++){if(t>=d[i][j]){if(find(i)!=find(j)){cnt++;if(cnt==n)break;merge(i,j);}}}if(cnt==n)break;}return cnt==n;
}int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin>>T;while(T--){cin>>n; for(int i = 1; i <= n; i++)cin>>a[i].x>>a[i].y;for(int i = 1; i <= n; i++)for(int j = i+1; j <= n; j++)d[i][j] = getd(a[i],a[j]);LL l = 0, r = 1e15+10;while(l < r){LL mid = (l+r)/2;if(check(mid))r = mid;else l = mid+1;}cout<<r<<"\n";}return 0;
}
【HDOJ7058】Ink on paper(生成树,或二分答案建图+并查集联通性)相关推荐
- Ink on paper 最小生成树-Prim-二分答案并查集
题意 : 平面直角坐标系中有n个水滴,每个水滴以0.5cm的速度扩散,求经过多久所有的水滴可以连接在一起. 思路 : 将任意两个墨水滴连接并求解最小生成树就是墨水恰好全部连接时的情况.全部连接的时间就 ...
- hdu3715 二分+2sat+建图
题意: 给你一个递归公式,每多一层就多一个限制,问你最多能递归多少层. 思路: 先分析每一层的限制 x[a[i]] + x[b[i]] != c[i],这里面x[] = 0,1, ...
- POJ - 2446 Chessboard 二分匹配+建图
题目链接 题意很简单,是二分匹配的一种常见的题型,问题就在于怎样转换到二分图上来. 首先对对n*m-k正常点进行编号,然后遍历查找每一个正常点的上下左右是否能连接(就是判断另个点是否也是正常的),如果 ...
- [USACO]地震 (二分答案+最优比率生成树详解)
题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...
- UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)
整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...
- UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)
题目要求为 最大化最小值,很明显就是二分答案. 题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT. 我们二分答案,二分着陆时间间隔的最小值 x. 枚举每两个飞机 p , ...
- 解题报告:luoguP2868 Sightseeing Cows G(最优比率环,负环判定,二分答案)
根据题意,我们要环上各点权值之和除以各边权值之和最大. 求最大答案,很明显可以使用二分答案.那么我们假设当前答案为 x,如果有更大的答案,那么方程就可以按下图转换: 也就是说如果有更大的答案,则有一个 ...
- P2759 奇怪的函数(二分答案,数学运算)
P2759 奇怪的函数 范围2e92e92e9,直接枚举肯定超时,正着直接求答案求不出来,那么运用逆向思维,直接二分答案判断即可.这道题涉及简单的数学运算. 要xx>=nx^x>=nxx& ...
- P3743 kotori的设备(二分答案,思维,线性)难度⭐⭐⭐
题目链接 题目背景 kotori 有 n 个可同时使用的设备. 题目描述 第 i 个设备每秒消耗ai个单位能量.能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗.也就是说,对于任意实 ...
最新文章
- php redis安装使用
- hibernate 关联总结
- Find a way
- boost::multiprecision模块mpfr相关的测试程序
- 前端解读控制反转(IOC)
- 百度 自然语言处理API
- 远程计算机如何访问本地,远程计算机的本地Web服务访问(本地主机与IP地址)...
- BZOJ-1050-[HAOI2006]旅行comf(并查集)
- iOS label显示不同颜色的字体
- 进程、轻量级进程(LWP)、线程
- 吊炸天!15岁成杀人犯,监狱里学编程,37岁获释后年薪70万
- Visio2016卸载干净,以及同时安装Office2016和Visio2016的方法
- 服务器架构模式BS和CS的特点与区别
- Caffe源码解析(一) —— caffe.proto
- 数组(Arry)几个常用方法的详解
- j3455linux网卡不亮,J3455 ProxmoxVE v6.0-4 直通物理网卡教程
- JavaWeb Ajax二级联动Bootstrap的基本使用
- glew, glee与 gl glu glut glx glext的区别和关系
- 水星路由器上网设置服务器无响应,怎么防止路由器DNS被劫持弹出广告
- CSS 控制 input 只显示下划线效果