自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Freopen的博客

自娱自乐之地

  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 有向图的强连通分量

POJ 2186#include<cstdio>#include<algorithm>#define maxn 100005using namespace std;int n,m;int siz[maxn];int info[maxn],Prev[maxn<<1],to[maxn<<1],cnt_e;inline void Node...

2018-10-31 17:01:44 115

原创 【2018 国庆雅礼 NOIP 培训】D1T3 画作(paint)

问题描述小 G 的喜欢作画, 尤其喜欢仅使用黑白两色作画.画作可以抽象成一个 r×c 大小的 01 矩阵. 现在小 G 构思好了了他的 画作, 准备动笔开始作画. 初始时画布是全白的, 他每一次下笔可以将一个 四联通的部分涂成黑色或白色.你需要告诉他, 在给出的构思下, 他最少需要下笔多少次才能完成画作.输入格式第一行两个正整数 r,c. 接下来 r 行, 每行 c 个字符, 表示目标...

2018-10-31 16:40:31 558

转载 写代码的小女孩(转)

天冷极了,下着雪,又快黑了。这是NOIP的前夜。在这又冷又黑的晚上,一个衣衫破烂的小女孩在机房敲着代码。她从班里逃出来的时候还拿着一本算导,但是有什么用呢?那是一本很破旧的书——那么大,一向是她妈妈垫桌角的。她默写SPFA的时候,年级主任突然冲进机房,吓得她把算导都丢掉了。书叫一个学数竞捡起来拿着跑了。他说,他可以用那本书当草纸,证明切比雪夫定理。小女孩只好自己写二叉堆,一双小脚冻得红一块青一块的...

2018-10-31 15:13:07 413 3

原创 边双联通分量

#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<stack>#include<queue>#define maxn 10005using namespace std;int n,m,w[maxn],dfn...

2018-10-30 22:15:49 89

原创 点双联通分量

找割点,然后把栈中割点下的边拿出来塞在vector中,STL大法好。POJ 2942 Knights of the Round Table#include<cstdio>#include<algorithm>#include<cstring>#include<cctype>#include<queue>#include&lt...

2018-10-30 22:12:21 156

原创 无向图的割点、桥

#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<stack>#include<queue>#define maxn 100005using namespace std;int n,m,dfn[maxn],...

2018-10-30 20:48:02 103

原创 父亲、儿子、兄弟表示法存储多叉树

兄弟表示法:#include<cstdio>#include<algorithm>using namespace std;int n,m,son[101][101],cnt[101],x,Fa[101],y,pre,lc[101],rc[101]; void dfs(int x){ if(!x) return; sort(son[x]+1,son...

2018-10-30 20:20:38 1185

原创 邻接表存图(链式前向星或vector)

#include<bits/stdc++.h>#define maxn 100005using namespace std;// 链式前向星 常数优秀,使用结构体可获得更优秀的常数int info[maxn],to[maxn<<1],Prev[maxn<<1],cnt_e;inline void Node(int u,int v){ Prev[++c...

2018-10-30 20:02:17 502

原创 容斥原理

例:计算含有某几个质因子的数的个数#include<cstdio>#define maxn 20using namespace std;int n,k,a[maxn],ans=0;void dfs(int now,int sum,int typ){ if(now == k+1){ if(sum &amp

2018-10-30 19:54:51 1961

原创 归并法的另类活用

归并排序是OI中的一种常用方法,因为它借助了对于两个有序队列,合并成一个有序队列,只需要看队头,并以此达到O(n)的合并复杂度,至于分治只是活用它的一种方式罢了。但是看队头的思想并不只局限于队列。比如说丑数这个经典题:对于一给定的素数集合 S = {p1, p2, …, pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S。这个正整数集合包括,p1、p1p2、p1p1、p1p2p...

2018-10-30 12:27:12 215

原创 NOI.AC #53. eval

题目描述或许这道题比经典的“表达式求值”还是要简单一点的。有一种简单的编程语言,我们如下定义其中的概念:常数:单个数字,即 0 到 9。注意不会出现多位数字的情况。变量:单个大写字母,即 A 到 Z。每个变量可以存储一个整数,所有变量的初始值为 0。值:常数或者变量。赋值语句:由变量、=、值构成,例如 A=3,B=A,C=C。表示将变量修改为右侧的值。加法语句:由变量、+=、值构成,例如 A+=9,B+=B。表示将变量额外加上右侧的值。语句:赋值语句、加法语句或者循环

2018-10-30 11:30:00 413 1

原创 匈牙利算法

理论依据:hall定理#include<bits/stdc++.h>#define maxn 2005using namespace std;int n,m,e;int info[maxn],Prev[maxn*maxn],to[maxn*maxn],cnt_e;inline void Node(int u,int v){ Prev[++cnt_e]=info[u],in...

2018-10-29 22:36:27 206

原创 KM算法

个人理解,不喜勿喷,欢迎推广。KM算法的原理在于这样两个事实:1.最大匹配等于最小点覆盖(证明自行百度)同理:最大权匹配等于最小顶标和(证明自行百度)。顶标就是对于x部的每个点i定义一个顶点标号dx[i],y部为dy[i]满足对于每一条边(u , v): w(u , v) <= dx[u] + dy[v]求Min(sigma(dx[i]) + sigma(dy[i]))2....

2018-10-29 16:45:05 799

原创 LUCAS定理

#include<cstdio>#include<algorithm>#include<cstring>#define mod 9999991using namespace std; int t;long long n;int fac[mod+1],inv[mod+1]; void fac_inv(long long siz){ ...

2018-10-29 12:26:32 123

原创 有重复元素的组合

字典序从小到大#include<cstdio>#include<algorithm>using namespace std;bool vis[30];int n,r,arr[30],a[30],had;bool check(int now){ for(int i=now-1;i>=1 && a[i]==a[now];i--) if...

2018-10-29 12:23:21 788

原创 N的R排列

#include<cstdio>bool vis[30];int n,r,arr[30];void dfs(int now){ if(now == r+1){ for(int i=1;i<=r;i++) printf("%d ",arr[i]);return void(puts("")); } for(int i=1;i<=n;i++) if(!vis[i...

2018-10-29 12:09:48 203

原创 高精度加减乘除

为增进鲁棒代码能力和提高代码效率(卡常)能力,重构高精度模板#include<bits/stdc++.h>using namespace std;struct Bignum{ #define maxn 20 #define lensiz 3 #define lenmax 1000 int a[maxn] , len; Bignum...

2018-10-29 12:00:26 262 1

原创 catalan数

// 有逆元#include<cstdio>#define mod 998244353int h[2000];int Catalan(int n){ h[0] = h[1] = 1; for(int i=2;i<=n;i++) for(int j=0;j<i;j++) h[i] = (h[i] + 1ll * h[j] * h[i - j -

2018-10-29 11:46:14 99

原创 大数的乘法取幂

long long Mul(long long tmp,long long res,long long mod){ long long ret=0; while(res){ if(res&1) ret=(ret+tmp)%mod; if(tmp>MAXN)tmp=tmp-(mod-tmp); else tmp=(tmp<<1)%mod; res&gt...

2018-10-29 11:12:05 62

原创 学习C++中的有用函数

1:int __builtin_popcount(int x)long long __builtin_popcountll(long long x)求数字x二进制中的1的个数实测:#include<cstdio>int main(){ long long x = 1ll<<60; printf("%d\n",__builtin_popcount

2018-10-29 09:01:57 460

原创 Hall定理

hall定理是判定二分图是否存在完全匹配的定理。完全匹配:是指最大匹配数为min(|X|,|Y|) 也就是X或Y集合其中一个集合所有点都被匹配了。设二分图中G=<V1,V2,E>中 |V1|=m<=|V2|=n,G中存在从V1到V2的完全匹配当且仅当V1中任意k(k=1,2,…,m)个顶点至少与V2中k个顶点是相邻的。判断是否有完全匹配的方法...

2018-10-28 22:14:52 9631

原创 树上dsu

现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有n个叶子节点,满足这些权值为1…n的一个排列)。可以任意交换每个非叶子节点的左右孩子。 要求进行一系列交换,使得最终所有叶子节点的权值按照遍历序写出来,逆序对个数最少。n<=200000这个题其实就是要求出每个非叶子节点的,左儿子中的一个叶子上的值大于右儿子中一个叶子的值,的对数。树上dsu就是一种启发式合并,...

2018-10-27 16:53:25 423

原创 NOIP模拟赛 太阳神

太阳神拉很喜欢最小公倍数,有一天他想到了一个关于最小公倍数的题目。求满足如下条件的数对(a,b)对数:a,b 均为正整数且a,b<=n 而lcm(a,b)>n。其中的lcm 当然表示最小公倍数。答案对1,000,000,007取模n<=10000000000换个方向,求lcm(a,b)<=n的对数。设gcd(a,b) = dsigma([a/d * b/d ...

2018-10-22 12:24:07 430

原创 一类枚举算法

当需要求k元组数量,k元组(a1,a2…ak)满足元素均为正整数且a1 * a2 * a3 … ak <= n时,枚举最小的数,然后枚举第二大的数。。。。然后依次,加剪枝,可以通过积分证明时间复杂度是O(n ^ [(k-1) / k])比如说:for(int a=1;1ll*a*a*a<=sum;a++) for(int b=a;1ll*b*b<=sum/a;b++)...

2018-10-22 12:06:40 113

原创 锦标赛游戏

题目描述YJC 很喜欢玩游戏,今天他决定和朋友们玩锦标赛游戏。锦标赛游戏的规则是这样的:一共有 i(1≤i≤n)个人参与游戏,每个人都编上号(之后用 编号代替人)。任意两个人之间都要进行一场比赛(即单循环赛制),每一场比赛双方获胜的 概率都是 0.5。对于两个人 x 和 y(1≤x,y≤i),如果 x=y 或存在一个序列(a1,a2,…,am)(m≥2), 满足 a1战胜了 a2,a2战...

2018-10-22 08:40:26 309

原创 树上骗分算法

当树上问题的求解复杂度和高度有关系,可以考虑缩链。。。毕竟没有几个出题人无聊到卡这种解法(不要透露给出题人)

2018-10-21 22:16:27 129

原创 NOI.AC热身赛第二场 sequence(序列)

题目描述给一个序列 A ,你可以进行 k 次交换操作,最大化最大子段和。k<=10发现交换的数一定一个在最大子段外,一个在最大子段内。然后就可以dp了。dp[i][a][b][c]表示在前i个点,选了a个子段外的点,b个子段内的点,c=0代表第i个点在最大子段前,c=1代表第i个点在最大子段中,c=2代表第i个点在最大子段后。相当于用一维来使得转移更加清晰的套路。...

2018-10-21 22:10:49 303

原创 [HDU5726]GCD

题目描述给出一个有N(N≤100,000)个整数的序列A1,…,An(0<Ai≤1000,000,000)。然后回答 Q(Q≤100,000)个询问,每个询问一个区间[L, R]的GCD值是多少,即GCD(Al, Al+1,…, Ar),并回答在整个序列上有多少个区间[L’, R’](1<=L’ < R’ <= N)满足GCD(Al’, …Ar’) = GCD(Al, A...

2018-10-20 14:46:55 154

原创 最小方差生成树

#include<bits/stdc++.h>#define maxn 2005using namespace std;int n,m;int F[105];int x[maxn],y[maxn],w[maxn],b[maxn],c[maxn];bool usd[maxn];int Find(int now){ return !F[now] ? now : F[now]...

2018-10-19 17:29:06 301

原创 BZOJ 2395: [Balkan 2011]Timeismoney

最小乘积生成树。sigma(Ai) * sigma(Bi) 最小。我们把每个生成树描述为一个点(sigma(Ai),sigma(Bi)),那么显然最小的sigma(Ai) * sigma(Bi)一定出现在凸包上又由于一些反比例函数的基本知识发现最小的乘积一定出现在凸包的顶点上,如果在边上,那么一定有一边在反比例函数的另一端。然后用Quickhall这个清新的算法求凸包,主要是因为点数太多才...

2018-10-19 16:55:09 151

原创 卡特兰数

h(n)= h(0)*h(n-1)+h(1)h(n-2) + … + h(n-1)h(0) (n>=2)h(n)=h(n-1)(4n-2)/(n+1);h(n)=C(2n,n)/(n+1) (n=0,1,2,…)h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)1.矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问...

2018-10-16 16:31:50 122

原创 [bzoj]noip十连测欧贝里斯克的巨神兵(obelisk)——dag图DP,状态压缩

题目大意:有一张n个点,m条边的有向图,有多少个子图(选定一个边集)是没有环的。答案对1e9+7取模。(n≤17)显然求的就是DAG个数,于是考虑一层一层的加点,但是发现显然会算重,因为并不能保证层次分明,可能有两个点为同一层的但是又分两层DP导致算重。然后我就想保存上一层的点,那么选入的新点一定要和上一层的点连边才行,这样虽然不会算重,但是不仅要打恶心的3进制DP还是一个O(4^n)的算法?...

2018-10-16 08:53:15 580

原创 [noip2016十连测第五场]travel (贪心)

题目描述给定一个长度为 n 的格子序列 x1,x2,…,xn。每一次 Lyra 可以选择向左跳到任意一个还没到过的位置,也可以向右跳到任意一个还没到过的位置。如果现在 Lyra 在格子 i,她下一步跳向格子 j,那么这次跳跃的花费为|xi-xj|。注意,跳意味着格子 i 和格子 j 中间其他的格子都不会被这次跳跃影响。并且,Lyra 不应该跳出边界。Lyra 的初始位置在格子 s。Ly...

2018-10-15 17:03:08 301

原创 XXX speed

题目描述比特山是比特镇的飙车圣地。在比特山上一共有n 个广场,编号依次为1 到n,这些广场之间通过n-1 条双向车道直接或间接地连接在一起,形成了一棵树的结构。因为每条车道的修建时间以及建筑材料都不尽相同,所以可以用两个数字li、 ri 量化地表示一条车道的承受区间,只有当汽车以不小于li 且不大于ri 的速度经过这条车道时,才不会对路面造成伤害。Byteasar 最近新买了一辆跑车,他想在比...

2018-10-02 15:48:22 341

LemonPlus版

啊这。lemon是一款很不错的测试软件,使用简单的同时模拟了竞赛测试的环境,并且可以兼容linux,OIer可以下载使用试一试。

2020-05-16

空空如也

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

TA关注的人

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