- 博客(110)
- 收藏
- 关注
原创 2763: [JLOI2011]飞行路线
裸的狄杰,但我不太会写堆,抄了很久。#include#include#include#include#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#def
2017-11-07 08:37:12 279
原创 3700: 发展城市
这题需要大量的lca,预处理是可以,但是会写死,因此采用rmq。先学会如何求两个路径[a,b],[c,d]的交。只要分别求c,d到[a,b]距离最近的点[u,v],然后判u,v是否在[c,d]上即可。下面以用c求u为例。rif lca(r,c)!=r then uelse if lca(a,c)!=r then uelse u然后检验。ru∈[c,d]当且仅当u
2017-11-06 20:29:41 260
原创 #241. Lefkaritika
把点按横坐标排序,然后枚举正方形的底边所在行,可以对于横坐标相同的点,纵坐标大的没有卵用。对于每个正方形,假设在它上方的、纵坐标最小的前提下横坐标最小的点可以管辖它。那么很显然有些正方形是不会被管辖的。这些正方形夹在两个相邻的点中间,可以被O(1)算出来。然后剩下的正方形都有且只有一个点可以管辖。那么可以通过直接枚举管辖它的点来搞事情。枚举右边纵坐标小于它的点,左边横坐标小于等于它
2017-10-29 19:31:30 394
原创 #1956【NOIP2015模拟赛NO.9】vfk的地雷
概率dp就是这样,怎么想都是错的,题解怎么想都想不通,但它就是对的。期望有些难算,我们还是先算概率。f[i][j]表示前i个雷,挂了j句话。那么剩下还有r-j句话,编号1,..,r-j,第k句话挂的概率为(1-p[i])^(k-1)*p[i],所以有话挂的概率为它们的和,即1-(1-p[i])^(r-j),则没话挂的为(1-p[i])^(r-j),记为x则f[i][j]+=f[i-
2017-10-05 16:31:20 271
原创 P1415 拆分数列
恕我直言智商有限,被傻逼题给虐了。两次dp就好了。f表示以i结尾的、最后一个数最小是多少(记录最后一个数开头的位置)。g表示以i开头的、第一个数最大的是多少。注意考虑g的初始条件时要考虑最后一个数的前缀0。这种题不会做真的不想活了。#include#include#include#include#include#includeusing namespace std;#de
2017-10-04 21:09:36 369
原创 #228. 噼里啪啦
先考虑这个问题的弱化版(貌似与解题无关),我们把这个问题放到数组上。考虑贪心。将区间排序以后,去掉有包含关系的,会得到一坨横纵坐标均单调递增的区间。这时只要每次取最右边那个就可以了。然后再考虑这题。一次性把lca搞出来,然后按深度从大到小枚举。把链会伸到它的子树里的询问全部删掉。易知这是对的。代码:#include#include#include#include#inclu
2017-09-24 20:58:25 230
原创 3241: [Noi2013]书法家
从洛谷的分类可以看出这是道dp题。记fn[i]为N的R[k]≤I时N的最大贡献,fo[i][j]为O的u≤i,u+W-1≥j时O的最大贡献,fi[i]为I的P[1]>=i时I的最大贡献。求出上述三者后可以O(m^2)求得答案。另外地,记Sj[i][j]为第j列前i个的和,对于fo[i][j]:
2017-09-03 19:23:48 293
原创 P1131 [ZJOI2007]时态同步
十年前的ZJOI真良心,n=1e6还O(n)。#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define sqr(x) ((x)*(x))#define G getchar()
2017-08-19 14:36:44 290
原创 P1232 树的计数
13年的NOI题。这个题很容易想错,但代码真的好写。不要被数据范围所欺骗。这题可以O(n)做出来。先按bfs序把点重新标号。然后从1到n枚举,当枚举到i时:如果i的位置在i-1前,i必对深度有1的贡献。因为i的深度必大于i-1,而i-1是之前所有点中深度最大的。证毕。否则,必有一种选择使i对深度无贡献,即把i挂在dfs序与i相差最小的、深度比i小1的点上。可以证明这使唯一的,因
2017-08-17 14:33:58 298
原创 1758: [Wc2010]重建计划
#pragma GCC optimize("O2")#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define sqr(x) ((x)*(x))#define G getchar
2017-08-15 15:18:20 279
原创 FIBTREE - Fibonacci Numbers on Tree
斐波那契数列的通项公式而在膜1e9+9的条件下,有一个与sqrt(5)等价的数,这个数就是383008016。因此上式可以改写成276601605*(((1+383008016)*500000005)^n-((1-383008016)*500000005)^n))即两个等比数列的和,这样就能用线段树打标记,然后O(1)求值了。第二个询问用树剖搞搞就好了。第三个询问分两种情况。当y是
2017-08-11 15:43:53 334
原创 617E - XOR and Favorite Number
莫队,用统计每个块内每个值出现了几次。对数列进行前缀异或和,每个查询因此相当于问a[l-1]^a[r]是否为k。因此l移动时统计a[l-1]^k出现的次数,r移动时统计a[r]^k出现的次数。没了。
2017-08-05 14:46:04 240
原创 1150: [CTSC2007]数据备份Backup
上面的插入、删除操作均需用堆维护。想不通,把堆写错了。。。#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define sqr(x) ((x)*(x))#d
2017-08-04 09:05:55 241
原创 1639 - Picnic Planning
#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define sqr(x) ((x)*(x))#define G getchar()#define LL long
2017-08-03 14:30:56 190
原创 2395: [Balkan 2011]Timeismoney
最小乘积生成树板子题。#include#include#include#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define sqr(x) ((x)*
2017-08-01 19:36:46 183
原创 1392 - Surround the Trees
凸包裸题。#include#include#include#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define sqr(x) ((x)*(x))#
2017-07-29 15:01:04 211
原创 P1070 新年趣事之游戏
次小生成树板题。先求出最小生成树。(因为题目没有说清楚边的条数,所以我使用了prim)然后在最小生成树上预处理出每两点间的树边的最大值。(每个点BFS一边就好了。)然后枚举没加进去的边,每次替掉所在环上除自己外的最大值,取Min就是答案了。复杂度O(n^2)。代码:#include#include#include#include#include#include#
2017-07-28 15:33:23 303
原创 1243 网络提速
建图跑最短路。#include#include#include#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define G getchar()#d
2017-07-28 13:59:39 225
原创 T7025 miaom与+1(一)
以下摘自王哲凡教授的课件。•先构造出S到T的最短路网。•最短路网是啥?•满足dis_(S,x)+W_(x,y)+dis_(y,T)=dis_(S,T)的边(x,y)组成的图。•然后在最短路网上dp出S到每个点x的路径条数P_x 和每个点x到T的路径条数Q_x•设P_T=Q_S=Z•一个点x为必经点当且仅当Z=P_x Q_x•一条边(x,y)为必经边当且仅当Z
2017-07-27 20:28:39 409 1
原创 4484: [Jsoi2015]最小表示
讲一句废话。边x->y能被删掉当且仅当x能走过其他路到y。先进行拓扑排序,然后按拓扑序的逆序加点,这样可以保证每次加进去的点都没有入度。记当前枚到的点为x。然后对x能到的所有点按到出度为0的点的最长路排序,从大到小枚举,记为y。用bitset维护一个点能到达哪些点。如果y到的点x都已经能到了,那就把x->y删掉。
2017-07-27 14:47:21 494
原创 3417 - Network
TMD树剖过不掉。#pragma GCC optimize("O2")#include#include#include#include#include#include#includeusing namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#def
2017-07-27 14:04:29 243
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人