关闭
当前搜索:

USACO 2018JAN Silver

A.lifeguards(线段树+枚举) 枚举删掉哪条线段,离散化+线段树维护线段覆盖长度qaq B.rental(贪心+二分+枚举) 枚举留几头牛,贪心算收益qaq C.mootube(并查集+暴力) 类似最大生成树的并查集+暴力处理出dis,然后暴力回答询问qaq...
阅读(4) 评论(0)

bzoj1770 [Usaco2009 Nov]lights 燈(高斯消元解异或方程组+枚举自由元)

首先我们发现每个开关要不嗯1次,要不摁0次,没必要摁多次。于是对于每个点i,我们就得到了这样一个方程组: a[i][1]*x[1]^a[i][2]*x[2]^…^a[i][n]*x[n]=1. 其中a[i][j]表示i,j是否有边,如果有就是1,否则是0.x[i]表示是否嗯开关i。然后我们用高斯消元解这个方程组,可以用bitset优化。然后爆搜枚举自由元,取最优解。...
阅读(389) 评论(0)

luogu1361 小M的作物(最小割)

类似bzoj3894,S向每个点建边,容量为种在A的收益,每个点向T建边,容量为种在B的收益,对于每一个点,我们必然要割掉连向S或T的一条且仅一条边。对于割之后的图,S集的点均选择了种在A,T集的点均选择了种在B。那对于共同种在A地有额外收益的点怎么办呢?,我们新建一个点x,S向x连边,容量为收益,x向所有需要共同种在A的点连边,容量为inf,则如果这些点有一个点没有割掉向T的连边,我们势必要割掉收...
阅读(116) 评论(0)

bzoj1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树/动态点分治+堆)

括号序列做法真是神神神呀qaq直接去看岛娘的博客吧:传送门。 或者直接去看noi2008国家集训队论文《数据结构的提炼与压缩》 by cqx1.20upd:终于看懂了点分治+堆的方法…orz hzwer 准确理解每个堆的意义很关键… C[x] 维护的是x所控制的子树中每个点到x在重心树中的父亲的距离 B[x] 维护的是x所控制的子树中以x的每个儿子为根的子树到x的最大距离,即在重心树中x的每...
阅读(42) 评论(0)

bzoj3672 [Noi2014]购票(dp+斜率优化+点分治+cdq分治)

首先考虑如果是序列怎么做,比较明显的dp,dp[i]表示i走到1的最少花费,则 dp[i]=min{dp[j]+(dis[i]−dis[j])∗p[i]+q[i]|j<i,dis[i]−dis[j]<=li[i]}dp[i]=min\{dp[j]+(dis[i]-dis[j])*p[i]+q[i] |j<i,dis[i]-dis[j]<=li[i]\} 我们自然想到斜率优化,我就不推式子了qaq...
阅读(20) 评论(0)

bzoj3219 巡游(二分答案+点分治+单调队列)

求中位数最大的路径。我们二分答案,把>=mid的边都变成1,< mid的边都变成-1,如果有一条路径的权值和≥0,则中位数可以为mid。所以我们就是要去找一条权值和最大的路径。具体做法与bzoj1758相同。 我把leoly慢了8s啊,orz...
阅读(15) 评论(0)

bzoj1758 [Wc2010]重建计划(二分答案+点分治+单调栈)

首先求一个最优比率的东西,我们二分答案,转化成判定是否存在一条合法路径使得边权和≥0.然后这个东西我们点分治去做。每次计算过x的合法路径的最大值时,为了避免不合法,我们一个子树一个子树的做。我们处理出g[i],表示目前这棵子树深度为i的点的最大距离,tmp[i]表示之前做过的子树深度为i的点的最大距离。我们每次用g[i]去询问tmp,也就是要在tmp[l-i,r-i]中选一个最大值,我们发现这就是一...
阅读(22) 评论(0)

bzoj3697 采药人的路径(点分治+dp)

把边权0变成-1,路径边权和为0就是阴阳平衡了。我们点分治,考虑一条过根的路径,被根分成两部分,如果是合法的,那么休息站不是在前半段,就是在后半段。我们记g[i][0]表示到根的边权和为i,且不存在休息站的路径数;g[i][1]表示存在休息站的路径数。一个一个子树的做,避免不合法的情况。用tmp[i][0/1]表示已经做过的子树的信息。则对答案的贡献就是 g[0][0]∗tmp[0][0]+∑i=...
阅读(91) 评论(0)

bzoj2599 [IOI2011]Race(点分治)

求点权和为K,且边数最少的路径。我们点分治就好了,不过据说这题卡时。。。所以我们需要一些小trick。比如说不容斥,提前记录bel,用来保证只更新合法情况。类似之前的做法,我们可以O(n)扫来更新答案,然后因为相等时我们要找最优的答案,比较麻烦。。。复杂度可能也就退化了。我们排序时如果dis相等,要把dep小的排在后面,这样我们从后往前扫遇到的第一个合法的就是最优得了。其实应该用类似dp的方法来维护...
阅读(32) 评论(0)

CIA11 毒瘤题(七维偏序,分块+bitset)

首先bitset很强呀x,我们针对每一维,对于每一个点预处理出比他小的集合。然后他的答案就是这k个集合的交。但是O(n^2k)的空间很gg。我们可以分块,对于每一维,只预处理出若干块集合,然后查询的时候找到离他最近的块,用这个块的答案暴力得出正确的集合。应该是O(nn−√+n2∗7/32)O(n\sqrt n+n^2*7/32)...
阅读(31) 评论(0)

bzoj2152 聪聪可可(点分治/树形dp)

就是求路径和%3余0的有序点对个数。可以点分治。还可以树形dp。 dp[i][j]表示以i为根的子树中的点,到i的路径长度%3余j的个数。每次统计一下过i的答案就好了。点分治...
阅读(30) 评论(0)

bzoj1414 [ZJOI2009]对称的正方形(二分答案+二维哈希)

首先我们考虑偶数个点和奇数个点的方阵枚举中心方式不太相同,我们用类似manacher的处理方法,填上一堆0,把他们全都变成奇数的情况。然后我们枚举每一个点作为中心,二分答案找到以这个点为中心最大的合法方阵。就可以直接统计这个点对答案的贡献了。这样已经是O(n2logn)O(n^2logn)的了,我们需要O(1)判断一个方阵是否上下左右均对称。类似不用manacher求最长回文子串的方法,把这个子串镜...
阅读(25) 评论(0)

poj1740 A New Stone Game(博弈论)

结论:偶数堆,相同数量的堆有偶数个,可以模拟操作的是必败局面。只有初始局面就必败,才先手必败,否则必胜。具体证明见dalao Visjiao博客:传送门 #include #include #include using namespace std; #define ll long long #define N 110 #define inf 0x3f3f3f3f inline int re...
阅读(29) 评论(0)

bzoj1468 Tree(点分治)

点分治,就是每次找到目前子树的重心,把它当做根,处理所有过重心的路径信息,然后递归处理子树。 什么是一棵树的重心呢?选出的一个点,使分出的子树中节点数最大的子树最小,就是重心。这样分出的子树点数不超过n/2+1,就可以保证复杂度了。怎么找重心呢?我们就按定义来找,每次O(n)。然后每次递归时处理过根的合法点对。怎么做呢?我们容斥一下,变成给定一个数组,问有几个有序对满足和<=K。我们可以排序+线...
阅读(35) 评论(0)

bzoj3295 [Cqoi2011]动态逆序对(cdq分治+树状数组)

我们把删除操作倒着考虑,变成逐渐加数,每个数按加入的顺序给时间标号tit_i。(没被删过的数随便按顺序给时间标号1…n-m),每个点我们记录三个信息(ti,xi,yi)(t_i,x_i,y_i)分别表示时间标号,位置,数值,每一个点又都是一个询问,答案是加入这个点后增加的逆序对数。那么对于一个询问(t,x,y),他的答案就是满足 ti< t&&xiy或者tix &&...
阅读(27) 评论(0)
641条 共43页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:55037次
    • 积分:6692
    • 等级:
    • 排名:第4119名
    • 原创:635篇
    • 转载:6篇
    • 译文:0篇
    • 评论:15条
    欢迎神犇勾搭~~~
    QQ:1104161801