自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雯舞

Love three things int he world -- Manchery

  • 博客(978)
  • 资源 (2)
  • 收藏
  • 关注

原创 [点分树 二分答案] BZOJ 2117 [2010国家集训队]Crash的旅游计划

二分答案后就转化为有多少个数到某点距离小于多少 这就是个裸的点分树啊 复杂度O(nlog3n)O(n \log ^3 n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>using namespace std;inline char nc(){ static char buf[100000],*p

2017-03-13 13:32:33 663

原创 [乱搞 思路题] BZOJ 2722 [Violet 5]爱的花环

好神的题啊 我不会做啊 AwD orzz#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(

2017-03-13 13:30:25 670

原创 [数位DP] BZOJ 2714 [Violet 3]交替和

就是个需要实现的比较精细的数位DP 枚举长度 如果长度是奇数 那么需要的是奇数交替和的和 与 偶数交替和的和 的 差 如果长度是偶数 那么需要的是奇数交替和的和 与 偶数交替和的和 的 和 我一开始以为奇数偶数只要看最后一位就可以了 实际上在奇数进制下并不是这样#include<cstdio>#include<cstdlib>#include<algorithm>#include<cs

2017-03-13 13:27:45 622

原创 [暴力 单调栈] BZOJ 2228 [Zjoi2011]礼物(gift)

这个东西 搞法不一 我是这么搞的 沿着zz轴的方向看 一定是一些重叠的正方形叠在一起 我们对于每一个zz 都对(x,y)(x,y)求出fx,yf_{x,y} 表示最大的以(x,y)(x,y)为右下角的正方形的大小 然后在zz这一维上 大小就是区间最小值 我们用单调栈弄一弄就好了 我写的二分求fx,yf_{x,y} 复杂度O(n3logn)O(n^3\log n) 但是实际上用悬线法可

2017-03-13 13:24:45 660

原创 [组合数学] BZOJ 2227 [Zjoi2011]看电影(movie)

答案是 (K+1)n−1∗(K+1−n)Kn(K+1)^{n-1}*(K+1-n) \over { K^n} 证明很妙啊 先加上一个位置并看成一个环,那么方案数就是(K+1)n(K+1)^n,并且可以保证一定合法,因为是环,又因为是环可以转有K+1K+1个方案重复了,所以实际上是(K+1)n−1(K+1)^{n-1}。 拆掉一个空座位回到原问题,因为是空位,所以一定没有人跨过去

2017-03-13 13:19:22 579

原创 [费用流建模] Codeforces Gym 101190 NEERC 16 D. Delight for a Cat

很好的建模题 首先变换一下 默认每天都sleep 那么eat的价值就是这一天两个值的差值 每KK天eat的次数必须在[mine,maxe][min_e,max_e]之间 然后我们在变换一下 KK天这个区间[i−K+1,i][i-K+1,i]变成区间末尾ii表示 第ii天eat 能够对[i,min(i+K−1,n)][i,min(i+K-1,n)]天都产生贡献 这样我们就得到了这样一个问题 选

2017-03-12 12:56:34 1593

原创 [主席树] BZOJ 4771 七彩树

感谢带我飞的rxd大爷我们先考虑不管深度限制可修改我们怎么做就是把每种颜色按照dfs序排列 然后给这些点都+1 但是相邻两个的lca处要-1 这样子树不同颜色数就是子树和然后我们把深度限制 看做按照深度的顺序加点 加点我们需要维护什么 每种颜色的序列 这个用set或平衡树 在序列中插入 我们对前驱后继lca什么瞎处理一通 然后记一下这个版本 也就是在主席树上修改然后一个深度限制 就相当于到那个深度

2017-03-12 11:44:25 716

原创 [XOR最小生成树 期望 DP] BZOJ 4770 图样

myh的题解 orzz 实现起来有点细节要处理 可能是我太弱?我就这么写了个记忆化搜索 结果极限数据要3.5s 然后我就活生生的被卡常了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define read(x) scanf("%d",&(x))using namespace std;type

2017-03-12 11:35:30 1312 3

原创 [暴力] BZOJ 2901 矩阵求和

O(nm)O(nm) 的暴力?#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf

2017-03-12 11:30:23 357

原创 [最小割] BZOJ 2400 Spoj 839 Optimal Marks

最近比较懒~ 详见这里 考虑每位分开 把01转化为ST集 变成最小割 然后我们还要解决点权尽量小的问题 有两种方法一是从T开始bfs出T集二是设立二维权值 边权是第一优先级 点权是第二优先级 详情百度#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x

2017-03-12 11:29:09 427

原创 [树形DP 暴力] BZOJ 3696 化合物

就是个暴力?! 复杂度 不会分析 n+e的题解好像进不去啊#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1=

2017-03-11 20:03:07 426

原创 [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠

蒟蒻不会做 这里讲的蛮详细的#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define read(x) scanf("%d",&(x))#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;co

2017-03-11 20:00:56 598

原创 [类欧几里得算法] BZOJ 2712 [Violet 2]棒球

同 [类欧几里得算法 数论] BZOJ 2187 fractionAwD orzz#include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath>using namespace std;typedef long long ll;typedef pair<ll,ll> abcd; abcd Solve(ll

2017-03-10 16:13:07 580

原创 [数位DP] BZOJ 2713 [Violet 2]愚蠢的副官 & BZOJ 1183 [Croatian2008]Umnozak

官方题解 The first observation we can make is that, for all positive integers xx, the digit-product p(x)p(x) is always less than or equal to xx. From x∗p(x)≤B≤1018x*p(x) ≤ B ≤ 10^{18} we can deduce that

2017-03-10 16:08:08 696

原创 [记忆化搜索 乱搞] BZOJ 2719 [Violet 4]银河之星

详见黄学长的博客 大概就是 所有在模三意义下同余的位置是等价的 可以看成一个点 一个棋子跨过另一个 则可以视为两个棋子合成一个 然后状压记忆化搜索就行了 注意需要预处理边界的情况 有些合成是不合法的 因为会超出边界#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<map>#de

2017-03-10 16:01:53 446

原创 [构造] BZOJ 2717 [Violet 4]迷路的兔子

玄妙的构造 总共有C2nC_n^2对兔子 每次值班会对3对产生影响 那么答案的上界就是C2nC_n^2 确实存在达到上界的构造方法#include<cstdio>int n;int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d",&n); printf("%d\n",n*(n-1

2017-03-10 15:58:19 722

原创 [分块] BZOJ 2724 [Violet 6]蒲公英

先填个坑 有时间再去看CLJ的题解 CLJ题解里有这样的一个定理 令mode(S)mode(S)为可重集合SS的众数 mode(A⋃B)∈mode(A)⋃B mode(A \bigcup B) \in mode(A) \bigcup B 证明 如果t∉mode(A)⋃Bt \notin mode(A) \bigcup B 那么tt在 mode(A⋃B) mode(A \bigcu

2017-03-10 15:56:08 295

原创 [几何] BZOJ 2710 [Violet 1]追风者 & POJ 3924 Tornado

好神的几何题 把一个点不动作为参照物 然后就变成了只有一个点在动 画出来就是这样然后就是求 一个点到两组平行线段的距离最小值#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef double ld;inline ld sqr(ld x){ return

2017-03-09 11:56:09 643

原创 [DP 思路题] BZOJ 2708 [Violet 1]木偶

蛮妙的题 满满的TC味考虑一种木偶与绳索配对的方法: AwD orz 木偶11与绳索k+1k+1配对,木偶22与绳索k+2k+2配对……木偶n−kn−k与绳索nn配对。 当木偶n−k+1n−k+1无法与绳索kk配对时,这样的配对方法能扔掉kk个木偶。然后就可以DP了#include<cstdio>#include<cstdlib>#include<algorithm>#define

2017-03-09 11:46:21 471

原创 [2-SAT] Codeforces 668E #348 (VK Cup 2016 Round 2, Div. 1 Edition) E. Little Artem and 2-SAT

题解   Let’s build for both 2-SAT formulas implication graph and let’s find strong connected components in this graph. If both of the formulas are not satisfiable then the answer is SIMILAR. If only on

2017-03-09 11:41:37 553

原创 [Trie树建图 2-SAT] Codeforces Gym 101190 NEERC 16 B. Binary Code

把所有串都扔进字典树 如果有两个是祖先和子孙的关系 就不能共存 那么我们直接用字典树辅助建一下图 跑2-SAT就好了 说起来真轻松#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>#include<vector>using namespace std;inline char nc(){ static

2017-03-07 20:36:43 1311

原创 [欧拉回路] Codeforces 528C #296 (Div. 1) C. Data Center Drama

题意都点晦涩啊 就是加尽量少的边 然后给每条边定向 使得每个点出入度都是偶数 我们考虑一条偶数长度欧拉回路 每隔一条边反向一次 就好了 奇数条怎么办 任意加一个自环就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[10

2017-03-07 20:30:07 719

原创 [容斥原理 DP] BZOJ 4767 两双手

首先一个向量可以被两个向量唯一表示 然后就转化为有障碍点的网格图路径计数 这应该是个经典的容斥模型 果然是NOIP模拟赛啊 如果不考虑障碍 那么答案是path(s,t)=Cmn+mpath(s,t)=C_{n+m}^m 然后我们考虑容斥 枚举路径上碰到的第一个障碍点vv Ans=Cmn+m−fv∗path(v,t)Ans=C_{n+m}^m-f_v*path(v,t) 其中fvf_v表示从

2017-03-07 20:25:15 1105

原创 [完全二分图生成树个数] BZOJ 4766 文艺计算姬

结论题 我也不会证 Kn,m=nm−1∗mn−1K_{n,m}=n^{m-1}*m^{n-1}#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;ll n,m,P;inline ll mul(ll x,ll y){ return (x*y-(ll)(((

2017-03-07 20:17:49 2775

原创 [分块] BZOJ 4765 普通计算姬

这就是道打暴力题 不过我偷懒写的复杂度较高 考虑把sumisum_i分成m块 然后我们预处理出每个点对每块的贡献 就可以O(m)O(m)处理修改操作 然后询问 如果我们用树状数组维护子树和 我们可以做到 O(m+nmlogn)O(m+{n\over m} \log n) 我们取 m=nlogn−−−−−√m=\sqrt{n \log n} 复杂度就是 O(nnlogn−−−−−√)O(n\

2017-03-07 20:14:14 860

原创 [乱搞 高精度] BZOJ 4404 [Neerc2015]Binary vs Decimal

一个性质 10k10^k的二进制末尾一定有kk个00 这很好证明 因为1010的二进制末尾就有一个00那我们考虑从低位开始扩展 考虑之前的所有答案 当前这一位可能的转移是加一个1 也就是加10k10^k 我们发现加10k10^k 对之前位没有任何影响 之后的加11操作也不可能对之前的位有影响 我们只要判断之前位是否符合就可以判断能否加入答案里了偷懒用Python 结果cf上没有任何问题

2017-03-07 07:58:15 646

原创 [暴力 树形DP] Codeforces Gym 100553H NEERC14 H. Hidden Maze

#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,1

2017-03-06 20:47:05 479

原创 [点分治 离线] BZOJ 4449 [Neerc2015]Distance on Triangulation

其实简单的找一条边然后分成两半 被我硬生生写成对偶图点分治分成三块 233 就把所有询问一起处理 点分治时 如果两个点在同一侧 就递归 否则对三个点bfs就能知道最短路径#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<map>#include<vector>#define c

2017-03-06 20:43:57 709

原创 [无向图简单环计数 状压DP] Codeforces 11D Beta Round #11 D. A Simple Task

这是NP的 算是一道模板题 学习下#include<cstdio>#include<cstdlib>#include<algorithm>#define read(x) scanf("%d",&(x))using namespace std;typedef long long ll;const int N=20;int n,m;int w[N][N];ll f[1<<N][N],an

2017-03-06 20:41:13 689

原创 [真正的单色三角形] BZOJ 3498 PA2009 Cakes

Description给定一个无自环重边的无向图,求这个图的三元环的个数以及补图的三元环个数。 n≤105,m≤105n ≤ 10^5,m ≤ 10^5PS. 可以在这里交Analysis这个东西 首先我们可以用BZOJ 2916 [Poi1997]Monochromatic Triangles的方法算出原图三角形和补图三角形的个数之和 然后我们再算出原图三角形的个数就好了 以下的代码都是求原图

2017-03-04 23:39:51 1118

原创 [SG函数 Trie树合并] SPOJ COT3 Combat on a tree

开始搬神犇的题解 题意 给定一棵NN个点的树,11号点为根,每个节点是白色或者黑色。 双方轮流操作,每次选择一个白色节点,将从这个点到根的路径上的点全部染成黑色。 问先手是否必胜,以及第一步可选节点有哪些。 N<=100000N<=100000 分析 首先是博弈方面的分析。 令SG[x]SG[x]为,只考虑以xx为根的子树时的SGSG值。

2017-03-04 20:11:20 963

原创 [竞赛图三元环存在性判断] HDU 4324 Triangle LOVE

给一个竞赛图 判断是否有三元环 首先 如果我们任意一个环 就可以找到一个三元环 证明: 假设有环上三个相邻的点a-> b-> c 如果c->a有边 就已经形成了一个三元环 如果c->a没边 那么a->c肯定有边 这样就形成了一个n-1元环 递归即可 我们可以考虑Tarjan求出强连通分量即可一个强连通分量必定包含一个环 不考虑读入 判断单次 O(n+m)O(n

2017-03-04 20:00:35 1866

原创 [树状数组] 洛谷 P3616 富金森林公园

达成成就 noip题想不出! 我是怎么做到想去写cdq分治加并查集的 还写不出来 数据结构学傻系列 其实是noip题 这样的话高度一样怎么办 我们把一个高度放大成一个高度区间就可以避免有相同数字了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ stat

2017-03-04 19:52:56 729

原创 [最小极差生成树 LCT || 二分答案 CDQ分治 并查集] Ural 2055 Urban Geography

把边按权值大小排序 然后用LCT按时间维护下最大生成树 就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>#include<set>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;

2017-03-04 09:28:23 780

原创 [费用流 高精度类 分数类] AOJ 2691 Cost Performance Flow

根据费用流增广的特点 费用和流量肯定是一条凸的分段函数 考虑的答案的几何意义 就是一个点到这条函数的最短距离 直接一段段求就好了 ps 这个题输出小数不就好了 结果输分数 就拉了个分数类 不会__int128 就又拉了个高精度类 总之这道题让我很桑心啊#include<cstdio>#include<cstdlib>#include<algorithm>#include<iost

2017-03-03 21:05:05 507

原创 [欧拉回路 KM] AOJ 2724 Laser Cutter

存在一种方式等价于存在欧拉回路 对于有向图即入度=出度 所以对所有的线段的起点与终点按距离进行最小权匹配即可#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<cmath>#define cl(x) memset(x,0,sizeof(x))#define read(x) scan

2017-03-03 20:58:46 350

原创 [字符串Hash 线段树] AOJ 2734 Donut Decoration

考虑把每个点看成一个可以在后面加字符的字符串 每次区间加一个字符串 相当于对区间的hash值做一次运算 这个直接线段树就行了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef unsigned int uint;inline char nc(){ static char buf

2017-03-03 20:56:28 350

原创 [点分治] AOJ 2687 Balanced Paths

题目大意 求树上合法括号路径的个数 这个 直接考虑点分治 一个合法的括号序列被切成两半 一定可以分别削成长度相等的连续左括号和连续右括号 dfs的时候用两个变量维护类似栈的东西 我们需要两个这样的栈 分别表示从根读到子节点 和 从子节点读到根 两种方向 #include<cstdio>#include<cstdlib>#include<algorithm>#include<cstrin

2017-03-03 20:53:31 328

原创 [二分图博弈] BZOJ 1443 [JSOI2009]游戏Game & BZOJ 2437 [Noi2011]兔兔与蛋蛋

二分图博弈考虑这样一类博弈问题博弈状态可分为两类 即状态空间可分为两个集合 对应二分图X集和Y集任意合法的决策使状态从一类跳转到另一类 可以用二分图描述不可以转移至已访问的状态无法转移者判负。问题转化从二分图指定起点开始轮流沿着边移动 不可重复访问点 无法移动判负。不妨设起点s∈Xs\in X 考虑该二分图的某个最大匹配 若ss不属于某个最大匹配 则先手所转移到的点y∈Yy\in Y一定

2017-03-02 20:59:47 417

原创 [K倍动态减法问题] HDU 2486 & HDU2580 & POJ3922 a simple stone game

这就是斐波那契博弈的加强版 对于某些特定的KK 我们有结论K=1K=1 后手必胜当且仅当nn是22的次幂 先手的策略是取lowbit(n)lowbit(n)K=2K=2 后手必胜当且仅当nn是斐波那契数 先手的策略是取nn的斐波那契拆分中最小的数这道题 我们仿照斐波那契博弈的构造方法 构造一个数列ana_n 将每个自然数都表示成ana_n中不连续的几项的和 f1+f2+⋯+fnf_1

2017-03-02 20:38:57 587

空空如也

空空如也

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

TA关注的人

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