![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法思想
Df_cjc
这个作者很懒,什么都没留下…
展开
-
分治算法实践——书页!
分治算法——页码问题原创 2017-10-22 21:50:51 · 436 阅读 · 0 评论 -
1099 D. Sum in the tree
Describe输入n个节点输入2 - n点的父节点输入每个节点的路径值:路径表示从当前节点到根节点的节点和偶数层隐藏路径值,不知道各个节点的值,求出各个节点值和的最小值Solution首先贪心想法:最小值,肯定要确保节点值应当靠近根节点,尽可能把当前节点的权值变成0,而让父节点去付出那些路径代价,因为路径是奇有偶没有,所以必须从前向后更新比如 1 -1 2 -1 3对于2...原创 2019-02-21 18:13:39 · 233 阅读 · 0 评论 -
最短路构造最短路95 C. Volleyball
Describen个点,m条边数据,n条出租车数据,出租车有一个距离上线ti和一个固定花费值ci,问你从s到e的最小出租车花费是多少,不能到达则输出-1Solution建两次图,第一次建造距离图,根据距离图进行n次最短路,确定一个最短路map,然后根据这个最短路地图进行第二次建图,遍历每个点,如果最短距离小于出租车上线则进行建图加边操作,根据第二次建图求最短路,进行输出/判断Cod...原创 2019-02-21 18:11:37 · 330 阅读 · 0 评论 -
持续化并查集HDU 5923 B - Prediction
Describe输入n,m,给你一个树有n个节点m-1条边,输入m-1个整数,第i个整数为节点i+1的父节点;然后输入m条边,表示一个图,输入q表示有q次询问:每次询问输入k和k个整数,k个整数表示树上节点编号,树上节点编号对应图中边节点编号,集合S由输入的树上节点编号以及所有祖先节点构成,对于每一个询问,输出由集合S引入边集合后,途中有几个联通块https://blog.csdn.net...原创 2019-02-21 18:10:53 · 191 阅读 · 0 评论 -
离散化+dfs+连通块计数 HDU 5925 Coconuts
Describe多组测试t输入一个map大小X * Y,map中有n个障碍点,输入n个障碍点的坐标,问map有几个连通块Solution如果地图不大完全可以dfs/bfs去做,但是X,Y【1,1e9】就需要进行离散化可见障碍点n很少,最多200个输入完障碍点后,分x,y轴进行离散处理排序后去除一维坐标重合的点,然后进行离散处理,障碍点间(包括障碍点和边界之间)距离大于1...原创 2019-02-21 18:05:54 · 250 阅读 · 0 评论 -
LCA+模拟 HDU 5927 Auxiliary Set
Describe多组测试数据给你n个点的树输入n-1条边后,q次询问,每次询问给你一个未知点集,点集外面的点都是已知的重要点,定义两个重要点的LCA也是重要点,问你一共有多少重要点Solution用到了LCA的一个性质:同一个节点的不同子树中的任何节点的LCA为该节点本身。所以我们要记录一个节点的所有儿子节点数目,然后根据未知顶点,依据深度从高到低排序,对于非重要点进行删除,...原创 2019-02-21 18:04:52 · 173 阅读 · 0 评论 -
欧几里得算法
通常我们用这个算法是求最大公约数最简单的代码是int gcd(int a,int b){ return (b > 0) ? gcd(b,a%b) : a; }但是递归次数过多也会超时不如用//因为并查集中find函数也可以递归实现但是呢对于一个时间限制强的就过不去,换成这种非递归就过了int gcd1(int a,int b) { int r; wh原创 2017-12-03 09:50:40 · 868 阅读 · 0 评论 -
吃鸡数
#include#include#include#includeusing namespace std;struct node{ int cnt ; int flag ;};int main(){ unsigned long long num,pnum; while(scanf("%lld",&num)!=EOF) { if(原创 2017-12-22 09:42:51 · 1261 阅读 · 0 评论 -
快速幂之二进制
#includeusing namespace std;int main(){ int a,b,c; long long ret = 1; while(cin>>a>>b>>c) { a %= c;//注意取模的运算法则 while(b > 0) { if(b & 1)//如果二进制中最后一位是一的话那就乘进结果 { ret *= a; }原创 2017-12-03 09:51:08 · 350 阅读 · 0 评论 -
最小值最大化POJ3258
Describe总长度为len小河中有n个石子,可以拿走m个,问你一个一个挨着跳,其中跳跃间距最小是最大是多少?Solution区间[1,len]寻找最大化最小值,判断满足该值为最小值需要删除多少个石子·如果删除石子过多,则选择最小值过大,r = mid - 1·否则,选择最小值符合或较小,l = mid + 1,但是如果l = mid + 1 步入到r后面的区间,那么就是不满...原创 2019-02-21 18:14:20 · 391 阅读 · 0 评论