
My Code
ws_fqk
这个作者很懒,什么都没留下…
展开
-
2442: [Usaco2011 Open]修剪草坪 单调队列优化DP
一道不错的题目。 直观想法是令f[i]表示前i个的最大值,感觉不太好判断QAQ。(其实也是可以的。。。) 不如令f[i]表示舍弃i的最小损耗。 正难则反嗯。。 f[i]=min(f[j]+e[i]),(i-j<=k)。 单调队列啦QAQ。#include<iostream>#include<cstdio>#define ll long long #define inf 1000000原创 2016-01-15 16:01:56 · 411 阅读 · 0 评论 -
1076: [SCOI2008]奖励关 概率与期望 DP
我们先考虑dp。 n很小,并且状态之间有明显的依赖关系,显然可以二进制状压。但是为了保证当前状态是从一个合法的状态转移而来是不好判断的。我们可以倒推,从后向前转移,因为后面的状态合法与前面的状态是否合法是没有关系的。倒推也是规避不合法状态的一种有效手段。这样最后的结果就是f[1][0]。 我表示不知道期望是什么东西。。更不知道怎么算。。膜一发题解吧QAQ。这一步的期望=(上一步的期望+这一步的得原创 2016-01-15 17:02:50 · 504 阅读 · 0 评论 -
2064: 分裂 状压DP
可以发现状态数很少。当时和现在状态的数任意组合相继可以有2^n个答案。然后似乎可以用f[i][j]表示当时的状态和现在的状态对应的最优答案。转移的话状压似乎也很方便。然后我又不会了。。。开始认(mo)真(bai)思(ti)考(jie)。。 为什么题解都是只可意会不可言传啊卧槽。。而且都是一维的好厉害的样子。。 不过题解的第一句话瞬间使我脑洞大开QAQ。。操作数上界是n1+n2,如果有两部分和相同原创 2016-01-16 08:10:02 · 346 阅读 · 0 评论 -
1391: [Ceoi2008]order 最大权闭合图 最小割
若选择任务,必须选择对应的机器。最大权闭合图模型。。 然后我发现我对网络流的理解很不到位,稍微一变形我就跪了。 有必要再回去研究一下QAQ。题解: 注意看最大权闭合子图中间连的无穷容量的边,这条边 < u , v > 限制了u选取的时候,v必须选取。 那么这道题的关系就是“可以选u的时候可以不选v,但是要付出一定的代价”。 那么把这条边的容量改为这个代价即可。 这样为什么是原创 2016-01-16 10:06:26 · 600 阅读 · 0 评论 -
1412: [ZJOI2009]狼和羊的故事 最小割
高一的时候似乎做了……然后我现在发现不会做了。。 (高一代码抄多了QAQ)题目要求的是将狼和羊分开,可以看做是分成两个点集,要使代价最小,那么也就是求一个最小割。 首先S->狼连边,权值为+∞。羊->T连边,权值为+∞,这些边都是不可割的。 然后我们把相邻的狼->羊连边,容量为1,代表在这个狼和羊之间建立篱笆的代价为1。 然后关于空地的问题。我们把狼->空地连边,容量为1,空地->羊连边,容原创 2016-01-17 09:59:49 · 591 阅读 · 0 评论 -
2127: happiness 最小割
好题。 去年夏令营的时候似乎davidwang神犇讲过,我一定是睡过去了qwq。。 时隔半年来做一下这道题。 首先我们不考虑相邻的相同有加成的情况,那么每个人只对应文和理两种情况,如果用最小割(不要和我说贪心)的思路来解决,也就是将所有人分到不同的集合,一个为S集,假设代表学文科,另一个为T集,假设代表学理科。Ai代表i选文的喜悦值,Bi代表i选理的喜悦值。那么这就成了一道noip普(xiao原创 2016-01-17 12:34:51 · 386 阅读 · 0 评论 -
2132: 圈地计划 最小割
做完了happiness这道题就很简单啦,只是把不同换成了相同,那么只要把相邻的点的A,B交换一下就好啦~#include<iostream>#include<cstdio>#include<cstring>#define inf 1000000007using namespace std;int n,m,cnt=1,sum,S,T;int head[10005],dis[10005],原创 2016-01-17 14:19:44 · 402 阅读 · 0 评论 -
3275: Number 最小割
想都没想就O(N^2)预处理然后拆点跑最小割了。。(事实证明跑的还挺快的?)后来膜了一发jiry_2神犇的题解: 把所有数分成奇数和偶数两组,因为奇数之间不满足1,偶数之间不满足2.然后从源点向偶数连流量为其大小的边,从奇数向汇连流量为其大小的边。如果奇数和偶数之间不能同时选那么就连一条流量无穷大的边。这样做出来的最小割满足矛盾的点对中只选一个,而且其流量就是要舍弃的数字的大小和。于是乎我们用总原创 2016-01-17 15:36:42 · 478 阅读 · 0 评论 -
1324: Exca王者之剑 最小割
看着题目描述如此的可怕,然后仔细一看。。。 这tm不就是方格取数吗。。。今天一直1A不能更赞(全是水题好意思不1A吗QAQ)#include<iostream>#include<cstdio>#include<cstring>#define inf 2147483647using namespace std;int n,m,cnt=1,sum,S,T;int head[10005],d原创 2016-01-17 18:17:39 · 374 阅读 · 0 评论 -
3158: 千钧一发 最小割
我收回我在3275: Number 最小割中说的话…… 奇偶建图才是正确的姿势,暴力会T的很惨。。 我们可以发现,两个奇数一定满足1,而两个偶数一定满足2,所以我们可以奇偶建图,如果一个奇数和一个偶数不能同时选,那么就连边inf,奇偶分别连向两边,跑最小割。10^6的平方是会爆longlong的。。。QAQ#include<iostream>#include<cstdio>#include<原创 2016-01-17 21:26:48 · 417 阅读 · 0 评论 -
2229: [Zjoi2011]最小割 最小割
这是一道神题啊……完全不会做。要我就直接N^2遍网络流了。。PoPoQQQ大爷题解: 最小割分治- - 首先朴素的想法是做O(n^2)遍网络流 但是这样显然是过不去的 根据一些结论,最小割最多有n-1个,这n-1个最小割构成一个最小割树 别问我为什么- - 因此我们分治寻找这n-1个最小割 每层分治,先任选两个点作为源汇做一遍最小割 然后找出S集和T集,对所有原创 2016-01-18 07:28:16 · 792 阅读 · 0 评论 -
1090: [SCOI2003]字符串折叠 区间DP
好久没做区间DP啦…… 我们可以用f[l][r]表示l->r的最小折叠长度,那么f[l][r]可以由f[l][i],f[i+1][r]转移而来,每次判断一下是否有折叠部分,如果有就暴力判断更新答案。记忆化搜索解决较方便。#include<iostream>#include<cstdio>#include<cstring>using namespace std;char s[105];in原创 2016-01-18 08:05:25 · 473 阅读 · 0 评论 -
1455: 罗马游戏 左偏树
学习了一下左偏树。 左偏树的性质: 1.【堆性质】:节点的关键字大等于其儿子节点的关键字 2.【左偏性质】:定义节点到最近的叶节点的距离为节点距离,任意节点的左儿子的距离大于右儿子的距离 左偏树在实现插入操作时总是从右侧插入,也就是总是让短的一侧生长,如果右侧长于左侧,那么交换左右侧,继续从右侧生长并查集来维护QAQ#include<bits/stdc++.h>#define N 1000原创 2016-01-18 10:42:53 · 370 阅读 · 0 评论 -
1367:[Baltic2004]sequence 左偏树
这是论文上的一道题目,上面有详细的证明。大于等于转化为大于可以用减标号的方法,即a[i]=a[i]-i. 其实我就是用来练习一下左偏树。。#include<bits/stdc++.h>#define ll long long #define N 1000005using namespace std;int n,tot,sum;int a[N],root[N],l[N],r[N],L[N]原创 2016-01-18 14:05:52 · 329 阅读 · 0 评论 -
1370: [Baltic2003]Gang团伙 并查集
暴力水过 朋友就合并,敌人就存下来再把它的敌人两两合并。 似乎可以拆点?#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char opt[1];int n,m,sum,cnt,f[1005],head[1005],ans[1005],next[10005原创 2016-01-18 18:47:25 · 581 阅读 · 0 评论 -
2946: [Poi2000]公共串 二分+hash
sb题WA了三遍卧槽。。。。 set忘记clear了。。 被各路SA&SAM虐成狗TAT,不会SAM路过。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<set>#define ll unsigned long long #define base原创 2016-01-18 19:50:37 · 551 阅读 · 0 评论 -
4007: [JLOI2015]战争调度 搜索
一开始算错了复杂度。。 可以用f[i][j]表示以i为根的子树中有j个平民,且fa[i]->root的状态已经确定时的最优答案,那么我们可以用大约9*2^20复杂度来解决。每次确定一个状态然后继续向下搜。注意不同的状态之间不要搞乱,即数组不要忘记清零qwq。#include<iostream>#include<cstdio>#include<cstring>using namespace s原创 2016-01-19 07:09:48 · 509 阅读 · 0 评论 -
2595: [Wc2008]游览计划 斯坦纳树
传说中的斯坦纳树。。qwq f[st][i]表示连通性至少为st,且经过i点的最小距离 方程1.f[st][i] = Min{f[s][i] + f[st - s][i]}(s为st的子集) 方程2.f[st][i] = Min{f[st][j] + w(i,j)}(i,j之间有边相连)第一步枚举实现,第二步spfa实现。 也就是先枚举连通的状态,对于每个状态先对每个位置枚举子集原创 2016-01-19 10:12:47 · 488 阅读 · 0 评论 -
4006: [JLOI2015]管道连接 斯坦纳树+状压dp
好题qwq。。 首先做一遍裸的斯坦纳树。(似乎我写的姿势不太对?好慢啊qwq)。 然后我们可以发现,答案要求的并不一定是一棵斯坦纳树,也可能是一个斯坦纳树森林,对于这个我们可以再次DP一下,思路与刚才类似。 令dp[i]表示至少包含状态为i时点的斯坦纳树的最小费用,为了保证这个状态是合法的,我们要保证有i时要包含频道为i的所有点,假设这个合法的状态为k。那么dp[i]=min(dp[i],f[原创 2016-01-19 14:21:49 · 677 阅读 · 0 评论 -
4016: [FJOI2014]最短路径树问题 点分治
首先dijkstra一下最短路径树,然后点分治。 每次对每个子树进行操作,f[i][0]表示深度为i时的最长路径,f[i][1]表示深度为i时当前最长路径的方案数,两个数组倒一倒~不要忘记清零。 qwq开始犯了sb错误居然水过了。。。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include原创 2016-01-19 19:42:19 · 798 阅读 · 0 评论 -
3996: [TJOI2015]线性代数 思路题 最小割(最大权闭合图)
感觉是一道很巧妙的题。 开始没看到A是01矩阵哭瞎qwq。 首先先化简一下这个式子,手推一下还是比较好推的,由于我不会用公式编辑器所以就从网上贴一个啦,感谢TonyFang。 由于a是一个01矩阵,我们把ai看做“选”或“不选”,那么bi,j就可以看做同时选i和j两个物品的收益,ci可以看做选第i个物品的代价。 也就是说选bi,j必须选ci,cj,那就是最大权闭合图啦。#include<io原创 2016-01-19 21:23:09 · 385 阅读 · 0 评论 -
4034: [HAOI2015]T2 树链剖分+线段树
卧槽一开始建的单向边结果T的停不下来。 傻逼链剖,别人家的省选qwq。#include<iostream>#include<cstdio>#define N 100005#define ll long long using namespace std;int n,m,cnt,dfn,v[N],head[N],size[N],deep[N],fa[N],in[N],out[N],belon原创 2016-01-20 07:13:55 · 301 阅读 · 0 评论 -
4010: [HNOI2015]菜肴制作 拓扑排序+贪心
做完这个题感觉熟练掌握了PE自动机。 我还能说什么。。。开始想错了,直接贪心+拓扑排序,结果发现第三组样例就过不了。 第三组样例是 5->2 4->3,想了想是因为5的原因而使2到了后面。。于是我就将图反过来试了一下,手画了几组好像没问题。。交上去居然A了。。瞬间不知所措。。我真的只是猜猜。。#include<iostream>#include<cstdio>#include<queue原创 2016-01-20 08:03:49 · 416 阅读 · 0 评论 -
3931: [CQOI2015]网络吞吐量 最短路+最大流
。。题意说的很清楚了,先求最短路径图再拆点网络流。 居然没被long long坑,1A赞。#include<iostream>#include<cstdio>#include<queue>#include<cstring>#define inf 1e18#define ll long long #define pa pair<ll,int>using namespace std;i原创 2016-01-20 09:14:13 · 324 阅读 · 0 评论 -
3997: [TJOI2015]组合数学 DP Dilworth定理
自己YY错了qwq。。。看了题解。。PoPoQQQ大爷: Dilworth定理:DAG的最小链覆盖=最大点独立集 最小链覆盖指选出最少的链(可以重复)使得每个点都在至少一条链中 最大点独立集指最大的集合使集合中任意两点不可达 此题中最大点独立集显然是一个集合满足集合中任意两点都是左下-右上的关系 DP一遍就能出解 复杂度O(Tmn)似乎也叫最长反链qwq,好像C原创 2016-01-20 10:30:04 · 533 阅读 · 0 评论 -
4027: [HEOI2015]兔子与樱花 贪心
别人家的省选T_T 直接sb贪心就好了。。每次选最小的。。#include<iostream>#include<cstdio>#include<vector>#include<algorithm>#define N 2000005using namespace std;int n,m,ans,c[N];vector<int> a[N];inline int read(){原创 2016-01-20 18:18:28 · 454 阅读 · 0 评论 -
4033: [HAOI2015]T1 树型DP
第一思路是用f[i][j]表示以i为根的子树中j个黑色的最大值,然后发现根本无法转移的样子qwq。。。。 于是换一种思路。。 用f[i][j]表示以i为根的子树中j个黑色对答案的最大贡献,这样我们就可以将子树内的和子树外的进行计算了。。 具体见代码。。#include<iostream>#include<cstdio>#include<cstring>#define ll long lo原创 2016-01-20 21:03:10 · 325 阅读 · 0 评论 -
2276: [Poi2011]Temperature 单调队列
维护一个L[i]单调不增的队列,且如果队首的L大于队尾的R就弹出。#include<iostream>#include<cstdio>#include<cstring>#define ll long long using namespace std;int l[1000005],r[1000005],q[1000005];int n,now,last=1,ans=1;inline in原创 2016-01-21 06:36:27 · 376 阅读 · 0 评论 -
1082: [SCOI2005]栅栏 二分+dfs+剪枝
首先贪心的性质是显然的,我们如果要取k个一定要取最小的k个,且尽量用最小的木材满足最大的需求,以减少浪费。 既然所取的k个是单调的,那么可以考虑二分,贪心的判断是否可行。 剪枝: 如果当前用了的+剩下所需最少的(即维护b[i]的前缀和)>所有的a。那么不可能合法,剪掉。qwq。。只想到这一个剪枝,题解还给提供了另一个,我感觉应该用处不大吧。。。就是如果下一个和这一个相同,那么可以不从第一块木材原创 2016-01-21 08:17:44 · 349 阅读 · 0 评论 -
1458: 士兵占领 思路题 最大流
T_T我太弱了这个题都不会做。反向考虑: 可以把最小问题转化为最大问题:如果把格子填满,我们最多能拿走几个? 这样做法就很显然了。。行列建图就好了。。qwq 有时候脑子需要拐个弯T_T#include<iostream>#include<cstdio>#include<cstring>#define inf 1000000007using namespace std;int n,m,原创 2016-01-21 14:27:53 · 320 阅读 · 0 评论 -
1711: [Usaco2007 Open]Dingin吃饭 最大流
两个二分图匹配合起来就好了。。中间限制流量为1。#include<iostream>#include<cstdio>#include<cstring>#define inf 1000000007using namespace std;int n,f,d,sum,cnt=1,S,T;int head[405],cur[405],dis[405],q[405];int next[50005原创 2016-01-21 15:00:55 · 318 阅读 · 0 评论 -
2400: Spoj 839 Optimal Marks 最小割
因为是找的最小割的题……所以使劲往这方面想还是能想出来的。。感觉如果是随便找的题连网络流都不一定看得出来啊qwq。。关于位运算,那就按位考虑啦,因为每一位都是独立的,所以只要单独处理就好了。我们要给一些点定值0或1。考虑对答案的贡献:如果一个是0一个是1才会贡献1,想到最小割模型:把点分成S集(代表0)和T集(代表1),每个割得代价为1,求最小代价。这样就好做多了,每一位都跑最大流就好了。。#inc原创 2016-01-21 16:30:05 · 291 阅读 · 0 评论 -
3505: [Cqoi2014]数三角形 组合数学
找规律就行了。。 首先所有的情况是C((n+1)*(m+1),3)。 水平+竖直共线的情况是(n+1)*C(m+1,3)+(m+1)*C(n+1,3). 剩下的就是斜着的情况:枚举i,j,代表两点为(1,i),(j,1)。然后令d=gcd(i,j),那么两点之间一定有d-1个点(所以要保证d>=2),那么现在不合法的情况有2*(d-1)(n+1-i)(m+1-j)。注意有两个方向所以要*2。#原创 2016-01-21 16:39:00 · 379 阅读 · 0 评论 -
2287: [POJ Challenge]消失之物 DP
f[i]表示容量为i的方案数,简单DP。 cnt[i][j]分类讨论,如果j<=w[i],cnt[i][j]=f[j],否则cnt[i][j]=f[j]-cnt[i][j-w[i]].#include<iostream>#include<cstdio>using namespace std;int n,m,f[2005],w[2005],cnt[2005][2005];inline int原创 2016-01-21 18:19:28 · 313 阅读 · 0 评论 -
2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
原来这就是传说中的莫队算法。。感觉就是个暴力啊qwq。。。 莫队算法离线处理区间无修改查询问题。#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#define N 50005#define ll long long using namespace std;int n,m,pos[N],c[N];原创 2016-01-21 18:59:47 · 347 阅读 · 0 评论 -
3781: 小B的询问 莫队算法
裸的莫队qwq。。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#define ll long long using namespace std;int n,m,k;ll ans,s[50005];int pos[50005],c[50005];struct node {int l,r,id;原创 2016-01-21 19:10:10 · 315 阅读 · 0 评论 -
1832: [AHOI2008]聚会 LCA
每次取三个LCA讨论。。#include<iostream>#include<cstdio>#define N 500005#define inf 1000000007using namespace std;int n,m,cnt;int head[N],deep[N],fa[N][20];int next[N<<1],list[N<<1];inline int read(){原创 2016-01-21 19:53:07 · 395 阅读 · 0 评论 -
3289: Mato的文件管理 莫队算法+树状数组
还以为编号在1-n以内就没离散化结果RE。。。 裸的莫队。。树状数组维护一下逆序对。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#define ll long long #define lowbit(i) (i&(-i))using namespace std;int n,q,c[50005]原创 2016-01-21 21:06:34 · 344 阅读 · 0 评论 -
3757: 苹果树 树上莫队 位运算技巧
引用Vfleaking神犇[WC2013]糖果公园的一些题解。 本题也可以如此解决,神奇的莫队: 上一次询问用(curV, curU, curTi)表示,并且我们还保留了 visited[v]:v节点在不在curV到curU的路径上 col[v]:v节点的颜色(原题好像是糖果来着?我就叫颜色了。) occur[c]:颜色c在curV到curU的路径上出现的次数 outc原创 2016-01-22 08:14:23 · 439 阅读 · 0 评论 -
3144: [Hnoi2013]切糕 思路题 最小割
sb不认真读题+sb的脑补能力。。 居然以为切面一定是平面。。居然以为x,y坐标可以不是整数。。回正题。。qwq 本题可以想象成一个矩阵,每个矩阵有一些值可以取,要求相邻格子的差不能超过D。 那么我们可以按高度分层建图,即每一个点,c(i,j,k-1)->c(i,j,k),然后高度差的问题,c(i,j,k)->c(x,y,k-d)。跑最小割就好了。#include<iostream>#inc原创 2016-01-22 09:58:41 · 469 阅读 · 0 评论