- 博客(31)
- 收藏
- 关注
原创 bzoj2229: [Zjoi2011]最小割
听说只有n-1种最小割,于是可以计算一棵最小割树(并不知道怎么证QwQ),不需要真的写出一棵树,只要 不断分治求最小割在ans数组更新答案即可。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;int
2017-09-25 10:05:05 219
原创 bzoj2257: [Jsoi2009]瓶子和燃料
由裴蜀定理,最后结果为所有数最大公因数,所以预处理公因数然后看最大的次数>=k的数。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch
2017-09-22 08:43:35 301
原创 bzoj1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
随便dp。(我是不会告诉你只是为了500题纪念的)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(
2017-09-21 15:00:24 522 2
原创 bzoj3531: [Sdoi2014]旅行
用类似主席树的方法动态开点链剖+线段树,分宗教维护线段树。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getch
2017-09-20 22:05:04 207
原创 带花树算法浅谈&&bzoj4405: [wc2016]挑战NPC
带花树简介带花树用来求解一般图的最大匹配问题。前置技能基础图论知识。 极大匹配:对于一个匹配,若无法在原图中找到任意边加入匹配,则称该匹配为一个极大匹配。 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配 。 交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边 … 形成的路径叫交替路。 增广路:对于一条路径,从一个未匹配点出发,走交替路,终止于另一个未匹配
2017-09-18 10:53:37 622
原创 【模板】FFT
不是我写的。作者见这里:传送门#include <cmath>#include <queue>#include <cstdio>#include <iomanip>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define N 400000#define ll long lon
2017-09-18 10:48:54 433
原创 bzoj2186: [Sdoi2008]沙拉公主的困惑
显然答案等于ϕ(m!)∗(n!/m!) \phi(m!)*(n!/m!) n!很容易求。 ϕ(x)=x∗p1−1p1∗p2−1p2∗... \phi(x)=x*\frac{p_1-1}{p_1}*\frac{p_2-1}{p_2}*... 所以ϕ(m!)m!=p1−1p1∗p2−1p2∗...\frac{\phi(m!)}{m!}=\frac{p_1-1}{p_1}*\frac{p_2-1}
2017-09-14 15:33:30 213
原创 bzoj1293: [SCOI2009]生日礼物
考虑双指针,显然区间中必须有一种颜色一个,所以如果队首的元素在区间中出现过两次以上,就可以将它弹出。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;int read(){ char ch=getchar();int f
2017-09-13 14:16:43 213
原创 在这里写上noip后要填的坑吧
1.树套树 2.CDQ分治 3.半平面交 4.FFT 5.LCT 6.KD-tree 7.后缀自动机 8.数学题…
2017-09-12 21:25:22 322
原创 bzoj2743: [HEOI2012]采花
考虑将询问离线。考虑每种颜色的花对答案的贡献,我们发现,对于一个位置上的花,若左端点在从1到上一个与该位置颜色相同的花的位置上,则该颜色对答案有贡献。所以将所有询问按1右端点从小到大排序,定义pre[i]为与该位置距离最近的与它颜色相同的花。对于一个位置,将pre[pre[i]]+1–pre[i]这段区间+1,然后每次询问的答案就是L上的值了,可以用线段树区间加,单点查询来做。#include<io
2017-09-12 15:39:15 250
原创 bzoj1208: [HNOI2004]宠物收养所
应某人要求把这题放出来QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,tree[80005][2],root,t1,t2,size,ans,fa[80005],s[80005],x1,x2;int mod=1000000;int r
2017-09-11 20:36:44 72
原创 bzoj2245: [SDOI2011]工作安排
费用流模板,调了半天把ans改成 long long就过了什么鬼… #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;const int inf=0x7f7f7f7f;int read(){
2017-09-11 16:07:51 206
原创 bzoj3781: 小B的询问
莫队,队询问排序,以左端点块为第一关键字,右端点为第二关键字,离线处理。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ll long longusing namespace std;int read(){ char ch=getchar(
2017-09-11 09:31:01 291
原创 bzoj3527: [Zjoi2014]力
只想贴个模板QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(
2017-09-11 08:48:51 188
原创 bzoj2819: Nim
链剖维护路径异或值。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(); while(ch>
2017-09-09 21:23:57 251
原创 bzoj2946: [Poi2000]公共串
将所有串连起来,中间加一个分隔符,二分答案,有连续ht>=mid且每个串中都出现一次就合法,否则不合法,一定要将分隔符特判掉,否则=0会输出1。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar()
2017-09-08 18:16:49 269
原创 bzoj3944: Sum
挖坑不填。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define ll long longusing namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=getchar(
2017-09-08 15:02:44 227
原创 Codeforces Round #433 (Div. 2) E. Boredom
题目大意问多少个两个点确定的矩形与给定区间有交。题解其实答案就是所有形成的矩形减没有交的矩形,那么由容斥原理,就是给定区间的4边的矩形减4个角,这个可以用主席树之类的维护。#include<map>#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<algori
2017-09-08 08:50:51 281
原创 bzoj3732: Network
求一边最小生成树就能保证两点之间边最小,然后lca搞搞就行了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=get
2017-09-08 08:45:10 244
原创 Codeforces Round #433 (Div. 2) D. Jury Meeting
题目大意所有人要去0号城市,并且只坐飞机,飞机只有去0的和从0出发的,所有人要呆k天,问最小机票花费。题解对去的和返回的飞机分类排序,去的从早到晚,回来的从晚到早,处理每个时间上所有人去0的最小代价(由于排好序,所以选择时选的是时间最小的),从晚到早选返回的,所有人都满足时算一下代价,最后找出代价最小值。#include<iostream>#include<cstdio>#include<cst
2017-09-07 14:28:07 223
原创 Codeforces Round #433 (Div. 2) C. Planning
题目大意飞机延误k分钟,每分钟只能起飞一架,每架飞机每晚一分钟有个代价,求最小代价。题解显然前k分钟代价不可避免,直接加入优先队列,其余的先加入优先队列并取出队首。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;int read
2017-09-07 14:20:05 238
原创 Codeforces Round #433 (Div. 2)B. Maxim Buys an Apartment
题目大意一个有基佬气息的人想让他左或有有邻居,知道邻居数,但不知道位置,求最少和最大能选几个位置。题解显然k=0 ans:0,0 k=n min=0; else min=1; max=max(n-k,2*k)(一个邻居有两个位置)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using na
2017-09-07 14:16:17 211
原创 Codeforces Round #433 (Div. 2)A. Fraction
题目大意求分子分母和为n的最大真分数。(分子分母互质)题解暴力QAQ。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') c
2017-09-07 14:11:56 193
原创 bzoj1821: [JSOI2010]Group 部落划分 Group
最小生成树裸题没看出来QAQ,连通块数小于k就输出。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0;
2017-09-05 20:20:36 279
原创 bzoj4720: [Noip2016]换教室
dp裸题,求一遍floyd,dp式 f[i][j][0]=min(f[i−1][j][0]+(double)dis[c[i−1]][c[i]],f[i−1][j][1]+(1.0−k[i−1])∗(double)dis[c[i−1]][c[i]]+k[i−1]∗(double)dis[d[i−1]][c[i]]);f[i][j][0]=min(f[i-1][j][0]+(double)dis[c[
2017-09-05 19:15:34 344
原创 bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
求后缀数组,二分答案,有超过k个连续height>=mid 就符合。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;int read(){ char ch=getchar();int f=0; while(ch
2017-09-05 14:20:30 239
原创 bzoj1412: [ZJOI2009]狼和羊的故事
裸最小割(模板)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;const int inf=0x7f7f7f7f;int read(){ char ch=getchar();int f=
2017-09-05 10:54:05 295
原创 bzoj1996: [Hnoi2010]chorus 合唱队
区间dp。 f[i][j][1/0]表示[i,j]区间上一个选左或右。 f[i][j][0]=f[i+1][j][0]*(a[i]#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int mod=19650827;int read(){
2017-09-05 09:10:08 306
原创 bzoj2006: [NOI2010]超级钢琴
维护前缀和,用线段树维护距离一个点[L,R]的最大值,并记录左右区间限制,将它加入优先队列,当取出一个点时,加入[L,where-1]和[where+1,R]两个值,记录左右限制。具体细节看代码。(写的不可读QAQ)#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>usi
2017-09-04 14:46:16 282
原创 bzoj2809: [Apio2012]dispatching
练习一下启发式合并,就照着别人写了一遍。(好菜QAQ) 从后往前枚举管理者,贪心选择最便宜的忍者,用splay+启发式合并维护。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=
2017-09-03 21:33:50 199
原创 bzoj4517: [Sdoi2016]排列计数
f[n]=(f[n-1]*f[n-2])(i-1); ans=c(n,m)*f[n-m].#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'
2017-09-03 19:20:21 202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人