自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 Warm up HDU - 4612

点击打开链接缩完点后得到一棵树 求出树的直径(最长的一条链) 然后拿割边数减去直径大小就是答案#include <bits/stdc++.h>using namespace std;struct node{ int v; int next; int flag;};node edge1[2000010],edge2[2000010];in...

2018-05-31 21:02:47 241

原创 Network POJ - 3694

点击打开链接q次询问 每一次加一条边 问加完这条边之后还剩多少割边可以想到 对于一个无向图 缩完点之后就是一棵树 且树上的边就是原图中的割边对于每一次加边操作 如果两点不在一个连通分量之中 就会把两点之间的所有割边全部去掉 形成有一个新的连通分量 相当于修改新树图中的一条链 这个过程用树链剖分维护一下就好了#include <cstdio>#include <...

2018-05-31 19:44:54 299

原创 Get The Treasury HDU - 3642

点击打开链接枚举立方体高度 然后对每一层求三次交的面积#include <bits/stdc++.h>using namespace std;#define ll long longstruct node1{ int x1; int y1; int z1; int x2; int y2; int z2;};str...

2018-05-23 10:29:20 239

原创 Transformation HDU - 4578

点击打开链接维护一次幂二次幂三次幂的三个区间和 再维护乘法加法赋值的三个lazy标记几个幂次和之间是有公式的 如图而lazy标记的使用也需要技巧首先赋值的优先级最高 只要赋值操作 其他两种操作直接舍弃 而加法和乘法虽然优先级一样 但是乘法操作不止影响乘法lazy 也影响加法lazy 具体见代码 #include <bits/stdc++.h>using ...

2018-05-21 21:19:33 294

原创 Dynamic Rankings ZOJ - 2112

点击打开链接动态主席树模板 推荐博客点击打开链接先用原序列的n个数建立一个静态主席树 再利用树状数组维护一个动态主席树 每次查询利用静态与动态之和 而更改只改动态主席树 即在取lowbit过程中把每个遍历到的位置对应的线段树更新一条链这里的区间查询另开了一个use数组 因为这种区间二分查询 需要静态和动态主席树的加和来决定下一步走向虽说树状数组可以解决的问题线段树都能解决 但是在这...

2018-05-17 14:41:09 282

原创 Doom HDU - 5239

点击打开链接题目给的这个模数很神奇 其实是2^63-2^31这个值 找规律发现 在摸这个数的前提下 对任何一个数平方运算不超过30次就变为一个恒定值 就可以用剪枝搞一搞 类似于开根号的题型 难在找规律#include <cstdio>#include <cstring>#include <algorithm>using namespace std...

2018-05-15 13:16:57 305

原创 In Touch HDU - 5361

点击打开链接当一个点要和一个连续区间内的所有点连权值相同的边时 可以用线段树来优化这个过程 就和区间更新一样的还有要注意的就是内存对齐问题 node1结构体中的 ll w 如果放在中间的位置就会MLE 具体什么是内存对齐问题就不说了 自行百度#include <cstdio>#include <queue>#include <cstring>...

2018-05-14 09:40:13 145

原创 Meeting HDU - 5521

点击打开链接将每个集合抽象为一个点 将该集合中的点都挂到上面 不用两两建边#include <bits/stdc++.h>using namespace std;#define ll long long#define N 0x3f3f3f3f3f3f3f3fstruct node1{ int v; ll w; int next;};s...

2018-05-13 15:19:38 155

原创 百度科学家(简单)(中等)(困难)

   困难版 题意有些绕 这就不说了 一个点对一个连续区间内的所有点连一条权值相同的边 这个线性的过程可以用线段树来优化但是这道题中每个位置上的元素会改变 这样只用线段树是无法维护的 需要用主席树来维护 这也没啥好说的 学了主席树其中道理自然明白 然后就是tarjan缩点后贪心 找出度为零的强连通分量加和的最小值直接上代码 #include <bits/...

2018-05-12 21:26:52 591 4

原创 Minimal k-covering CodeForces - 976F

点击打开链接具体建图看官方题解点击打开链接因为要求最小的边覆盖 所以要去掉最多的边 所以可以用网络流来解决先从最大值到最小值来枚举 源点到二分图第一部分以及二分图第二部分到汇点所连的边的权值代表当前情况下每个点需要去掉几条边 然后跑完一遍最大流后残量网络中的边即为所求 然后加大源汇点的流量 表示下一次要多去掉一些边#include <bits/stdc++.h>us...

2018-05-11 15:09:41 170

原创 Sumdiv POJ - 1845

点击打开链接对于  有   所以我们只需要求出a的所有素因子 然后将幂次乘b 搞几个二分幂累乘即可但是注意 如果用等比公式的话需要求逆元 会爆longlong#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ll lo...

2018-05-11 09:38:21 145

原创 Soldier and Number Game CodeForces - 546D

点击打开链接给一个数(a!/b!) 每次除一个数 问最多能除多少次很容易想到算数基本定理 n=(p1^a1)*(p1^ak)*......*(pk^ak) 其中pi是n的素因子 而ai是对应幂次 素因子已经无法再继续分下去 所以按照这个公式来一步一步分解n是次数最多的先要找出这些素因子 既然是素数那就素数筛预处理 同时如果筛到素因子 就看它的倍数是它的几次幂 这样在筛素数时就把每一个数...

2018-05-10 21:50:13 153

原创 GCD HDU - 2588

点击打开链接对于一个数n 在比它小的数中 除了他的因子 其他数和n的gcd均为1 所有符合题意的数x肯定是n的某个因子的倍数所以只用看n的所有因子 假设有一个n的因子p大于m 就看(n/p)的欧拉函数值是多少 累加至于为什么要求(n/p)的欧拉函数 这是为了解决”冲突“ 对于n的因子p和一个与(n/p)不互素的k  k*p就会变成n的其他因子或其他因子的倍数 这里需要仔细想想#i...

2018-05-10 15:35:37 225

原创 可能的路径 51Nod - 1247

点击打开链接题目给的几种操作明显是辗转相减求公约数 如果所给的ab和cd的公约数不等 那是无论如何凑不到一起的 两者在辗转相减的路径上也不会有交集#include <bits/stdc++.h>using namespace std;#define ll long longll getgcd(ll a,ll b){ ll t; while(b>0) ...

2018-05-09 15:36:36 195

原创 Well played! CodeForces - 976E

点击打开链接显然(感觉)把所有1操作用到一个生物上在题目要求的情况下会发挥最大效应 可以考虑一下只有两个生物和两次1操作的情况挑(h-d)值最大的b个生物取两者最大值 这样就得到了没有1操作情况下的最大效益 然后枚举每一个生物 减去之前对总效益的贡献在加上一通1操作后的贡献 取最大值#include <bits/stdc++.h>using namespace std;#defin...

2018-05-08 13:29:26 185

原创 最小正子段和 51Nod - 1065

点击打开链接一 线段树一个子段肯定是由两个前缀做差相得 那么对于每一个前缀 就看它前边比它小的最大的前缀 做差取最大值 线段树维护一下#include <bits/stdc++.h>using namespace std;#define ll long long#define N 0x3f3f3f3f3f3f3f3fstruct node{ int l...

2018-05-07 23:37:14 137

原创 Auxiliary Set HDU - 5927

点击打开链接看了题解才会... 之前还一直想用LCA怎么搞...对于一个非重要点 只要其下至少两颗子树上分别有两个重要点 那这个非重要点一定是他们的LCA 也变成了重要节点dfs一遍 记录每个节点的直接孩子有几个 记为son[cur] 对于每一个查询 把点按深度从深到浅排序 然后扫一遍如果当前点的son[cur]==0 那么以当前点为根的子树上已经不存在重要点 其父节点也就少了一个提供重要点的来源...

2018-05-04 15:45:54 111

原创 Vertex Cover SCU - 4439

点击打开链接虽然不是二分图 但如果把每条边都建成双向边 再对每一个点都匹配一次 就相当于把这个图从某个位置划分成了男女生两个部分 用男生对女生匹配一次 反过来女生又对男生匹配一次 具体是怎么划分的不用管 最后答案除2即可但如果只是建立单向边的话 有些关系就会被遗漏 因为题目中描述的点覆盖明显具有双向关系#include <bits/stdc++.h>using name...

2018-05-04 08:39:30 174

原创 To the moon HDU - 4348

点击打开链接主席树区间更新模板对于主席树中的每一颗线段树 除了左右区间的位置与父区间不再有任何关系以外 其他都是一模一样但是因为主席树中的线段树每一个区间和左右子区间的关系不好找 只能pushup 不能pushdown#include <cstdio>#include <cstring>#include <algorithm>using ...

2018-05-03 13:55:29 201

原创 Remmarguts' Date POJ - 2449

点击打开链接K短路 存模板#include <cstdio>#include <queue>#include <cstring>#include <algorithm>using namespace std;#define N 0x3f3f3f3fint dis[1010];struct node1{ int v...

2018-05-03 10:52:35 141

原创 Okabe and City CodeForces - 821D

点击打开链接将行与列都抽象为点 对于每一行或者列 把所有与其有接触的点都挂到上边 一入一出的权值为1和0 相邻点再连权值为零的边即可#include <bits/stdc++.h>using namespace std;#define N 0x3f3f3f3fstruct node1{ int x; int y;};struct node2{...

2018-05-02 13:54:16 176

原创 地铁 CSU - 1808

点击打开链接因为有c值的存在 不满足dp的后效性 所以不能直接跑最短路要把边抽象为点 将t值当做每个点的点权 每两个点的c值之差当做边权 出发点就是原图中所有和1相连的边对应的点 建立一个超级源点 连向这几个点 目标点就是原图中所有和n相连的边对应的点还有建图的问题 再建一个新图非常耗时(貌似会比原图稠密很多 比如星形图) 我们可以直接利用原图来跑最短路 详见代码这道题的复杂度问题...

2018-05-01 18:53:36 254

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除