关闭

[bzoj4173]数学

题目大意懒得写推导[n mod k+m mod k≥k]=[n−⌊nk⌋k+m−⌊mk⌋k>=k][n\ mod\ k+m\ mod\ k\geq k]=[n-\lfloor\frac{n}{k}\rfloor k+m-\lfloor\frac{m}{k}\rfloor k>=k] 于是等价于 [⌊n+mk⌋−⌊nk⌋−⌊mk⌋>=1][\lfloor\frac{n+m}{k}\rfloor-\...
阅读(104) 评论(0)

[bzoj4919]大根堆

题目描述给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。解法(不)容易看出这是一个变种LCS。 如果只有一条链就是LCS。 如果多条链...
阅读(246) 评论(0)

[bzoj3060]Tour de Byteotia

题目大意给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上。贪心把两边编号都>k的边先加入。 再把剩余的边加入,若形成环就删去新加边。 闭上眼睛感受当然最优。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int...
阅读(132) 评论(0)

流浪

题目描述DP考虑每个位置的贡献。 枚举一个位置,然后做dp,我们需要处理从(0,0)走k步到这个位置的方案数(中途不到达这个位置),以及从这个位置开始走k步到某个位置的方案数(中途不到达这个位置),以及从这个位置开始走k步中途不到达自己的方案数。 然后再做dp,从(0,0)走j步到达这个位置且中间恰好经过它k次的方案数。#pragma GCC optimize (2) #include<cstd...
阅读(126) 评论(0)

果树

题目大意问一棵树上有多少条路径不包含同色点。 一种颜色最多20个点。瞎做对于同色点提取出来两两形成一个约束。 这样约束只有n*20个。 因为最坏情况是每种颜色都出现20次。 那么n/20*20^2=n*20。 接下来变成了owaski的那道A,可以在本博客内搜索。#include #include #include #define fo(...
阅读(110) 评论(0)

容器

题目描述DP用括号表示一段区间。 设f[i,j,k]表示做到第i个位置,目前未被匹配的左括号有j个,还有k只跳蚤没有左括号。 转移可以直接枚举这个位置放多少右括号以及下一个位置放多少左括号,乘上对应组合数。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) #define fd(i,a,b) for(i...
阅读(104) 评论(0)

Fiend

题目大意满足li<=pi<=ri的排列p,问逆序对是奇数的多还是逆序对是偶数的多或者是否一样多?解法可以构造一个矩阵,ai,li~ri是1,然后就是问它行列式的符号或判断行列式是否为0。 模拟高斯消元,每次消到第i行时,让第i行变成第i列上有1且r最小的,这样可以保证任意时刻1都是一段区间。 可以用可并堆、平衡树或线段树来快速支持合并。#include #include<algo...
阅读(91) 评论(0)

Fable

题目大意对一个序列做k轮冒泡排序,输出最终序列。做法尝试计算每一个数的位移。 计算一个数前进的位数t等于在它前面比它大的数个数与k取min。 同样前面最大的t个数都会后退一格。 于是splay模拟这个过程统计每个位置的位移即可。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) #define fd(...
阅读(84) 评论(0)

容斥的原理及广义应用

容斥原理想起容斥原理,大家都不陌生。 相信很多地方都会举这样类似一个最简单的例子让大家理解容斥: 现在赛场上有n个人,都参加过WC、CTSC和APIO。 拿过至少一个比赛的金牌的有多少人? 我们可以简单计算拿过WC金牌的人数+拿过CTSC的金牌的人数+拿过APIO的金牌的人数。 但是这样会记重,比如jasonvictoryan,他既拿过WC的金牌又拿过APIO的金牌,又比如czllgzmz...
阅读(326) 评论(1)

景中人

题目大意n个二维点。 用下边界贴着y=0的面积不超过S的矩阵,最少用多少个覆盖所有点?DP同样的x坐标只保留y最大的,然后对y离散化。 容易发现矩形之间只会有相含关系或相离关系,相交是没有意义的。 然后大力区间dp,f[i,j,k]表示[i,j]区间覆盖所有y坐标>k的最小矩形数。 随便转移。n^4。#include #include #define f...
阅读(112) 评论(0)

杨柳

题目描述费用流容易发现不能移到另一个棋子上这个限制无用。 然后随便费用流。#include #include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn=500+10,maxm=1000000+10,inf=10000000...
阅读(99) 评论(0)

呵呵

题目大意n个点,i和j之间有wi*wj条边。 图中任一生成树的贡献记为每个点的度数积。 求所有生成树贡献和。prufer序富榄题解#include #include #define fo(i,a,b) for(i=a;i=b;i--) using namespace std; type...
阅读(74) 评论(0)

哈哈

题目大意DP容易发现满足那两个条件就是说不存在低谷。 设g[i,j,0/1]表示[i,j]是最后一次操作的,其中是递增还是递减的最大得分,由于相邻两项差1可以直接得到长度。 设f[i,j]表示操作掉[i,j]的最大得分,有两种转移。 f[i,j]=f[i,k]+f[k+1,j]f[i,j]=f[i,k]+f[k+1,j] f[i,j]=g[i,k,0]+g[k+1,j,1]+v[2∗w[k]...
阅读(88) 评论(0)

归并排序

题目大意给一个长度为2的次幂的排列做归并排序,在区间长度为2时比较器会变成随机返回值。 多次操作,每次要么交换两个位置,要么询问归并排序后第x个位置等于排序前第y个位置的概率。做法容易发现,如果x#include #include #define fo(i,a,b) for(i=a;i=...
阅读(132) 评论(0)

摧毁图状树

题目大意Q次询问,每次给一个k。 将树用尽量少的长度不超过k的祖先后代链覆盖,使得每个点至少覆盖一次。贪心对偶成选择尽量多的点,使得任意长度不超过k的祖先后代链上至多一个点被选择。 这样转化则贪心很显然。尽量选深度大的点。 如果有t个叶子,选取的点至多为t+(n-t)/k。 因为叶子一定会被选择,同样删去所有被选择的点后,每个联通块大小不会小于k(否则一定在原来的树中存在长度不超过k的祖先后...
阅读(195) 评论(0)
747条 共50页首页 上一页 ... 6 7 8 9 10 ... 下一页 尾页
    个人资料
    • 访问:251938次
    • 积分:10104
    • 等级:
    • 排名:第1813名
    • 原创:743篇
    • 转载:4篇
    • 译文:0篇
    • 评论:189条
    最新评论
    文章分类