"传送门" 最小值最大考虑二分答案,不难发现当最小值$mid$确定之后,原点到所有直线的距离一定都是$mid$时才是最优的,也就是说这些直线一定都是$x^2+y^2=mid^2$的切线。 接下来考虑一个点会被哪些切线所保护。作出这个点到圆的公切线,得到两个切点,那么在这两个切点之间的优弧上选择一个点 ...
分类:
其他好文 时间:
2019-10-05 12:09:30
阅读次数:
71
题目: 分析: 由数据范围可知:前五个点是Floyd,后五个点是一颗树,两两点之间的路径是唯一的,只需要求lca即可。 Floyd注意实现细节: 1.初始化时要把dis[i][i]赋成0 2.只有1个dis数组 倍增注意: 统计答案的时候要先统计在跳fa!! #include<bits/stdc++ ...
分类:
其他好文 时间:
2019-10-04 22:47:39
阅读次数:
113
╭(′▽`)╯ 总之,我们都知道lca是啥,不需要任何基础也能想出来怎么用最暴力的方法求LCA,也就是深度深的点先跳到深度浅的点的同一深度,然后一起向上一步步跳。这样显然太慢了! 所以我们要用倍增,倍增比较屌,直接2^k速度往上跳,而且复杂度和树剖lca差不多,那么步骤分为两步 1.让两个点到同一深 ...
分类:
其他好文 时间:
2019-10-04 20:38:19
阅读次数:
91
图论 HDU5093 同一行或者同一列,并且没有障碍 n,m<=100 感觉是二分图? 咋感觉出来的??? 没有障碍的情况:一行最多放一个,一列最多放一个 或者说一个物体用掉一行一列 二分图:左边代表每一行,右边代表每一列 由于没有障碍物,左边的每一个点都会向右边每一个点连一条边 匹配的结果就是mi ...
分类:
其他好文 时间:
2019-10-03 20:01:33
阅读次数:
74
这题太巧妙了。 题意是,给定2*10^5个区间。然后2*10^5组询问,每次询问一个区间,问至少需要几个给定区间,才能将其完全覆盖。坐标范围5*10^5。 如果只有一个询问区间,是经典的贪心问题。我们每次选择,尽可能覆盖的靠右的区间。 但是这题显然贪心的话,时间是不够的。 考虑使用倍增进行预处理。 ...
分类:
其他好文 时间:
2019-10-03 18:04:03
阅读次数:
68
$Luogu$ $Sol$ 首先当然是构建一棵最大生成树,然后对于一辆货车的起点和终点倍增跑$lca$更新答案就好.记得预处理倍增的时候不仅要处理走了$2^i$步后是那个点,还有这中间经过的路径权值的最小值以便之后统计答案. 再一看发现这题并没说给的图是联通的,也就是说跑了最大生成树之后可能有若干棵 ...
分类:
其他好文 时间:
2019-10-03 16:24:18
阅读次数:
75
P1613 跑路 倍增 我们考虑floyd 对于i,j如果有一个中介k使得i->k只用2^p以及k->j只用2^p,那么i->j可以一步到达 最后跑一遍floyd即可 记得是有向图! 代码: ...
分类:
其他好文 时间:
2019-10-03 14:30:16
阅读次数:
85
二分通常分为两类:二分查找和二分答案. T1 problem 给出一个数列$a[1...n]$,现在有m个询问,每次询问比x大的最小的$a[i]$的值. ans 离线:数列和询问都排序,然后扫一遍. 在线:排序,二分查找. T2 problem 定义一个区间的值为其众数出现的次数.先给出一个数列$a ...
分类:
其他好文 时间:
2019-10-02 18:33:02
阅读次数:
89
看到题目中$a define N 100010 define A 15 define K 20 define INF 0x7fffffff using namespace std; struct data { int tot,num[A]; void init() { for(int i=1;i=0 ...
分类:
其他好文 时间:
2019-10-02 14:27:06
阅读次数:
74
题目传送门 【题目大意】 【思路分析】 我们设$g[i][j][k]$表示从$i$走$2^k$步能否到达$j$,$d[i][j]$表示$i$到$j$最少要走多少秒。 用倍增预处理出$g$,然后就可以$Floyd$跑最短路啦!QwQ 【代码实现】 1 #include<cstdio> 2 #inclu ...
分类:
其他好文 时间:
2019-10-02 10:18:50
阅读次数:
79