雅礼集训
HbFS-
di4CoveRy
展开
-
[UOJ164] V 记录历史最值线段树
令标记为表示对这个区间加p后和c取max再多来两个标记记录两次修改间这个节点所能得到的最大标记是多少诶写线段树之前真应该把标记加法和节点加法先在草稿纸上写好以后再开始敲不然写起来很难受#include #include #define N 500050#define INF (1LL<<60)#define mid ((l+r)>>1)#define ls l,mid原创 2017-01-15 23:07:29 · 1111 阅读 · 0 评论 -
[POJ3177]Redundant Paths Tarjan求双连通分量
双连通分量缩点后重新构图,答案为叶子节点个数除以二,向上取整证明: 显然每个叶子节点至少至少需要连一条边出去,否则该节点被孤立,答案>=叶子节点个数/2,向上取整; 对于每一个叶子节点,寻找与他距离最远的一个叶子节点连边,反复操作直到没有孤立的叶子节点,这显然是一组合法解,故等号成立 证毕#include <iostream>#include <cstdio>#in原创 2017-01-20 20:46:38 · 328 阅读 · 0 评论 -
[BZOJ3997][TJOI2016]组合数学 平面图
平面图相关 从左下扫到右上即可#include <iostream>#include <cstdio>#include <cstring>#define N 1050using namespace std;typedef long long LL;int v[N][N],n,m;LL F[N][N];void ut(LL &x,LL y) { x = max(x,y); }int m原创 2017-01-20 21:29:55 · 394 阅读 · 0 评论 -
[BZOJ3894]文理分科 最小割
诶兄弟我正在B站直播写博客建立网络流模型 对于每个学生, 原点连向他,容量为他选择文科的收益 他连向汇点,容量问他选择理科的收益 对于每个学生,再多创建两个附加点p1,p2, p1连向他周围的学生容量为INF,周围的学生连向他容量为INF答案=正权值和-最小割#include <iostream>#include <cstdio>#include <queue>#include <c原创 2017-01-21 16:24:28 · 402 阅读 · 0 评论 -
[BZOJ2588]Spoj 10628. Count on a tree 可持久化线段树
离散化 对每个节点,用线段树表示该节点到根的路径上的值域 然后可持久化询问的时候查询u,v,LCA(u,v),fa[ LCA(u,v)]结点上的四棵线段树 做一做减法就好notice: 1、初始的权值已经超过了int,需要long long 2、最后一组询问的换行符不要输出!(我已经邮件了一发管理员希望他改题面)写起来很好写#include <iostream>#include <cst原创 2017-01-21 18:26:41 · 313 阅读 · 0 评论 -
[BZOJ4443][Scoi2015]小凸玩矩阵 二分法+二分图匹配
二分答案,把小于等于该答案的边加入二分图,判断匹配数是否大于等于n-k+1。#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <vector>#define INF 2147483647#define N 200500#define M 400050using namespace原创 2017-01-22 18:26:42 · 370 阅读 · 0 评论 -
[BZOJ4653][Noi2016]区间 线段树
将所有区间按li-ri排序,那么答案一定是一段连续的区间 有单调性,两个指针扫 一段区间是合法的当且仅当这个区间中存在一个点被超过m个区间覆盖 线段树维护区间最大值,支持区间加法操作即可 notice:l,r达到了1e9,需要离散化/************************************************************** Problem: 4653原创 2017-01-23 13:28:44 · 362 阅读 · 0 评论 -
[BZOJ2657][Zjoi2012]旅游(journey) 树的直径
太神啦翻popoqqq博客才知道了解法 构图找直径即可/************************************************************** Problem: 2657 User: di4CoveRy Language: C++ Result: Accepted Time:2724 ms Memory:2130原创 2017-01-23 13:30:25 · 332 阅读 · 0 评论 -
[Bestcoder Round#91][HDU6012] Lotus and Horticulture 排序
诶还是fst了 这题虽然简单但是坑点挺多的 把温度当成一条扫描线扫过去,把每个植物的两种温度分开来,权值是a-b 排个序扫过去Notice: 1、注意处理温度相同的情况(我居然把温度相同的双关键字排序!) 2、注意边界,温度是任意实数,所以将左边界改成2*l,右边界改成2*r+1#include <iostream>#include <cstdio>#include <algorith原创 2017-01-23 13:39:07 · 299 阅读 · 0 评论 -
[Codeforces343D] Water Tree 树链剖分
既然讲了这题,就写一写吧 直接剖,没啥好想的#include <iostream>#include <cstdio>#include <vector>#define mid ( (l + r) >> 1 )#define ls l,mid,t<<1#define rs mid+1,r,t<<1^1#define N 500050using namespace std;int son[N]原创 2017-01-23 18:16:53 · 383 阅读 · 0 评论 -
[Codeforces734E]Anton and Tree 树的直径
好神的题 做法:对于每一条边E(u,v),若两点颜色相同那么边权为0,否则为1,输出树的直径/2上取整 证明: 边权为0相当于将两个点并成一个点,那么树上的点相当于已经进行了黑白染色,对于树的直径,至少需要树的直径/2,上取整,才能染成同一颜色,做法即对直径的中点染色即可#include <iostream>#include <cstdio>#include <cstring>#原创 2017-01-23 18:34:29 · 295 阅读 · 0 评论 -
[BZOJ4551][Tjoi2016&Heoi2016]树 dfs序+线段树
维护一棵只有标记的线段树 标记为二元组(x,v)表示节点和深度 定义标记加法为取v较大的那个标记#include <iostream>#include <cstdio>#include <vector>#define mid ( (l + r) >> 1 )#define ls l,mid,t<<1#define rs mid+1,r,t<<1^1 #define N 100050usi原创 2017-01-23 21:54:35 · 305 阅读 · 0 评论 -
[BZOJ4710][Jsoi2011]分特产 容斥原理
容斥一发即可#include <iostream>#include <cstdio>#define mod 1000000007#define N 2050using namespace std;typedef long long LL;LL C[N][N],F[N],ans;int n,m;int a[N];int main() { scanf("%d%d",&n,&m);原创 2017-01-24 09:31:58 · 313 阅读 · 0 评论 -
[51nod 1362]搬箱子 组合数公式
天呐51nod是不是特别喜欢卡常啊这题一直推公式推到复杂度足够低就可以了,感谢班上的数竞大爷毛公给我的指点 枚举一下斜向下的操作有多少次,令它为aa,令竖着走为bb,a+b=na+b=n总共有n+m-a次操作,其中有三种操作,可以很简单的得到答案 ans=∑mi=0∑na=0Can+m−aCbn+m−2a ans = \sum_{i=0}^m \sum_{a=0}^n C_{n+m-a}^aC_原创 2017-01-24 23:16:09 · 840 阅读 · 0 评论 -
[玲珑杯#Round5]Grid Point 拉格朗日插值
答案为 g(n)=∑ni=0(2n+1)k−(2i+1)kg(n) = \sum_{i=0}^n(2n+1)^k-(2i+1)^k令这个k+1次多项式为f(x)f(x) 令s=k+1 根据拉格朗日插值公式 f(x)=∑si=0pi∗yi f(x) = \sum_{i=0}^s p_i*y_i 其中 pi=∏si=0(x−xi)∏si=0(xj−xi)p_i=\frac {\prod_{原创 2017-01-19 22:53:50 · 454 阅读 · 0 评论 -
[BZOJ1014][JSOI2008]火星人prefix
splay维护区间hash值,二分求lcp 大常数选手#include <iostream>#include <cstdio>#include <cstring>#define mod 100000007#define N 1000050#define eq 97LLusing namespace std;typedef long long LL;int siz[N],h[N],e[N]原创 2017-01-19 18:45:11 · 242 阅读 · 0 评论 -
[UOJ171][WC2016] 挑战NPC 一般图最大匹配
诶解法真巧 将一个篮子拆成三个点,且互相联通 对于所有的球x能放到篮子y,把球x向三个篮子拆的点连边若一个篮子里放进来的球数小于等于1,那么篮内部也会有一条匹配边#include <iostream>#include <cstdio>#include <cstring>#include <vector>#define N 2500using namespace std;int fa[N],原创 2017-01-18 21:42:36 · 260 阅读 · 0 评论 -
[UOJ246]套路 分类讨论+卡常
垃圾题目卡老子常数不过题目本身还是可以的当长度大的时候,值相邻最近的就小;当长度小的时候,值相邻最近的就大。哪个小我们枚举哪个卡卡常就能过#include #include #include #include #define N 200050using namespace std;typedef int LL;int f[N][2];int n,m,k原创 2017-01-14 20:54:00 · 420 阅读 · 0 评论 -
[UOJ245]天路 枚举答案判断
不得不承认题目长得很骨感既然要求输出的答案和标准答案误差不超过5%,那么就枚举输出的答案,每次增加5%来判断。诶写的RMQ,结果误用了STL的log函数,后来改成__builtin才过了#include #include #include #include #define N 400050#define LOG 17using namespace std;int原创 2017-01-13 23:52:57 · 357 阅读 · 0 评论 -
[UOJ244]短路 结论+dp
在雅礼中学听matthew99讲这道题这道题不是特别难拿到题目的时候就已经大概猜到解法长什么样了令F[i]为从原点走到(i,i)点所需要花费的最小代价,显然进入第i层前至少要向右移动i次再向下移动i次,路径是由若干个L型组成的考虑在第p行向右移动了一格代价为a[p],若存在一个q利用这个思路,每次转移的时候向平行方向移动的那一次一定是前缀最小值#include #in原创 2017-01-13 23:43:39 · 388 阅读 · 0 评论 -
[HDU5306]吉司机线段树
吉司机线段树给每一个点定义一个势能函数为该节点下不同的值的个数若该操作能够使当前节点的势能降低,那么暴力修改该区间内的所有元素,否则直接打标记这题每个节点记录最大值mx,最大值个数tot,次大值se,答案sum;若新来的值比>=mx,那么这个操作是没有意义的,直接return若新来的值>se并且若新来的值tips:这题卡常,要用读入挂才能过#原创 2017-01-15 23:03:17 · 1627 阅读 · 0 评论 -
[BZOJ3674]可持久化并查集 可持久化线段树维护数组
对于并查集数组fa[i],可以拿可持久化线段树来维护好像要按秩合并才能过吧/************************************************************** Problem: 3674 User: di4CoveRy Language: C++ Result: Accepted Time:1748 ms原创 2017-01-16 16:08:15 · 306 阅读 · 0 评论 -
[BZOJ1023]静态仙人掌 Tarjan+dp+单调队列
诶写完写完代码以后才发现天黑了,赶快溜出去找东西吃求仙人掌的直径,不能直接两边DFS找最长路,有这样一个反例绿色为真实的直径,可是如果第一遍找到最长路是红色路径的话,那么就找不到绿色路径还是用最传统的方法,dp求从该节点出发的最长连引用一篇写的虽然有点长但是写的很好的博客http://z55250825.blog.163.com/blog/static/1502原创 2017-01-16 19:25:54 · 483 阅读 · 0 评论 -
[UOJ241]【UR #16】破坏发射台 矩阵快速幂
若环的长度为奇数,也就是没有正对着的点,那么我们可以用类似dp的方法F[i][j]表示第i位颜色为j的方案数很容易可以推出公式 ans = (m-1) ^ n - (m-1)至于环的长度为偶数,要考虑正对着点考虑将环从长度一半处切下来,和剩下一半拼成一条宽度为2的环每个点不能和它相邻的点相同用F[i][j][k]表示第i位,上面颜色为j,下面颜色为k的方案数原创 2017-01-16 19:40:33 · 470 阅读 · 0 评论 -
[BZOJ4355]Play with sequence 吉司机线段树
定义二元组标记(p,c)表示对区间内元素x x=max(x+p,c) x = \max{(x+p,c)} 标记支持区间加法 tag1<p1,c1>+tag2<p2,c2>=tag<p1+p2,max(c1+p2,c2)> tag1<p1,c1> + tag2<p2,c2> = tag<p1+p2,max(c1+p2,c2)> 那么标记就可以下推啦 覆盖操作可以表示成tag<−INF,c原创 2017-01-17 13:17:40 · 1200 阅读 · 0 评论 -
[BZOJ2730][HNOI2012]矿场搭建 Tarjan求割点
原本想补觉的,结果睡一会儿竞赛老师给了个电话,再一会儿肯德基宅急送给了一个电话,再过一会儿高一学弟来敲门干脆不睡了,起来打题嗯这题别往双联通分量去想,直接想割点会好想一点求出图里面所有的割点,割点可以将这个图分成若干个连通块特判一个连通块不存在割点,随便往里面扔两个出口即可,出口个数+2,方案数为随意选两个点的方案数siz * (siz - 1)对于任意原创 2017-01-17 21:00:22 · 248 阅读 · 0 评论 -
[BZOJ4722]由乃 结论+线段树
大神博客说的很好:http://blog.csdn.net/werkeytom_ftd/article/details/54429577细节不多注意一下就好#include #include #include #define mid ( (l + r) >> 1 )#define ls l,mid,t<<1#define rs mid+1,r,t<<1^1#define N原创 2017-01-17 23:50:43 · 373 阅读 · 0 评论 -
[ZOJ1015]Fishing Net 弦图判断
最大势算法直接判断弦图#include #include #include #define N 2050using namespace std;int lab[N],vis[N],F[N][N],mark[N],tmp[N],cur;int n,m;void z() { for (int _=n;_>=1;_--) { memset(lab,0,sizeof(lab)原创 2017-01-18 16:00:09 · 442 阅读 · 0 评论 -
[BZOJ1006]神奇的国度 弦图染色
诶弦图真是好玩把完美消除序列找出来令p[x]为x在完美消除序列中的位置对于完美消除序列里的一个元素u,任意与u有连边的v满足p[v]>p[u],u的颜色是所有颜色中不与任何一个v的颜色相同且编号最小的颜色最后统计一下最大的颜色标号输出即可找完美消除序列用的是最大势算法,O(n+m)每次找最大lable的点的时候我选择了用堆(感觉不是很优美,可能有不这么暴力的原创 2017-01-18 17:26:45 · 318 阅读 · 0 评论 -
[UOJ79]一般图最大匹配
模板#include <iostream>#include <cstdio>#include <cstring>#include <vector>#define N 2500using namespace std;int fa[N],t,n,m;bool g[N][N];int gf(int x) { return fa[x] == x ? x : fa[x] = gf(fa[x]); }原创 2017-01-18 20:55:32 · 313 阅读 · 0 评论 -
[BZOJ4710][Jsoi2011]分特产 容斥原理
直接容斥一发即可/************************************************************** Problem: 4710 User: di4CoveRy Language: C++ Result: Accepted Time:632 ms Memory:34144 kb****************原创 2017-01-24 23:18:55 · 486 阅读 · 0 评论