随笔分类 - 题解
摘要:题面:有一个点数为 n 的无向完全图,边权分别为 [1, n(n−1)/2 ] 之间互不相同的整数。给定该图最小生成树 上每条边的权值 ai (递增序),试求合法的无向图数量。两个无向图是不同的,当且仅当存在一条边,在 两张图中对应的端点相同而长度不同。 Input: 第一行包含一个整数 n。 接下
阅读全文
摘要:1.loj[6181]某个套路求和题 题意: 从前有个 alpha1022,他在看某本奇妙的书的时候想到了这样一个函数: 然后就有了这样一个问题: 解体思路: 观察发现,的值只有3种:0,-1,1。所以我们可以枚举不同值的方案数来得到答案。 首先考虑最好想的情况:值为0。易证当仅当一个数
阅读全文
摘要:题面: 在遥远的苏远山上,yww 自诩为太阳。 yww 对其他自以为是太阳的人很敌视,他决定通过发出光芒来教化这些人。当 yww 的光芒照耀到一个人的身上时,这个人就会在这股古老而强大的力量的压迫下,双膝跪地,双手平举,随后身体前俯后仰,手也跟着摆动,并大声喊道:「yww 是我们的红太阳!」。 除了
阅读全文
摘要:标题是不是看不懂?没关系,简单来说就是毛子大学冬令营的题。 题面看不懂?没关系,我来讲述题意: 给定一个数n,一开始筐子A里有1~n一共n个数。假如A中某两个数的gcd不是1,那么这两个数可以一起放到筐子B里。 求(A中的数量+B中的数量/2)最小的数值. 构造题。 显然,尽可能让B中多A中少一定会
阅读全文
摘要:题面传送门 简述题意: 给定一个矩阵,n行m列,每一行最多选1个位置打上标记,且不存在某一列所有有标记的点的数量大于全部的一半,至少给一个点打上标记,求方案数。答案对998244353取模。 很水的暴力dp可以得84分,但100分的优化做法值得很多题借鉴。 先说简单说一下暴力: 我们直接求满足上面条
阅读全文
摘要:题面: 我们知道:相邻房间的犯人的宗教相同的方案数=总方案数-相邻房间的犯人的宗教不相同的方案数; 那么所有方案数是m^n; 我们假设第一个房间有m中取值方案,而对于每个房间(非第一个)都有m-1个取值方案,所以总方案是(m-1)^(n-1)*m; 那么答案就显而易见了; #include <bit
阅读全文
摘要:题面: 小a是一名强迫症患者,现在他要给一群带颜色的珠子排成一列,现在有N种颜色,其中第i种颜色的柱子有num(i)个。要求排列中第i种颜色珠子的最后一个珠子,一定要排在第i+1种颜色的最后一个珠子之前。问有多少种排列珠子的方案。 输入格式 第一行一个整数N,表示珠子颜色数量第二行N个整数,分别表示
阅读全文
摘要:题面 总体来说是一道从下往上的DP+贪心; 设f[i]表示将消息传给i,i的子树全部接收到所能消耗的最小时间; 那么对于i的所有亲儿子节点j,我们会贪心地先给f[j]大的人传递,然后次大..... 可以证明,这样的答案一定是最优的; 然后f[i]=max(f[i],f[j]+cnt); 总的时间复杂
阅读全文
摘要:题面 对于每个点,我们可以用一次dfs求出这个点到以这个点为字树的最远距离和次远距离; 然后用换根法再来一遍dfs求出这个点到除这个点子树之外的最远距离; 显然的,每次的询问我们可以用向上的最大值加向下的最大值得到; 具体换根法的实现可以看下面的代码~; #include <bits/stdc++.
阅读全文
摘要:题面 10%的数据,n ≤ 100, k = 0,w = 0。直接输出即可。(就是个完全匹配) 10%的数据,n ≤ 10, k≤ 20, 0 ≤ w ≤ 500。O(n!)枚举。(就是搜索啊~) 10%的数据,n≤ 15,k ≤ 20, 0 ≤ w ≤ 500。状压,fi,j表示处理了左边前i个点
阅读全文
摘要:T1.[LNOI2014]LCA 给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。 有q次询问,每次询问给出l r z,求sigma_{l<=i<=r}dep[LCA(i,z
阅读全文
摘要:题面 这道题明显的一定要找到直径的具体路径,所以两遍dfs是比较好的选择; 第一问是一道弱智题吧? 主要难度全部分摊在了第二问; 其实不难,先找到任意一个直径; 对于任意一个在直径上的点: 设nxt[i]表示这个点的下一个位置,pre[i]表示这个点的上一个位置; ls[i]表示这个点到直径的左端点
阅读全文
摘要:题面 这道题是一道数位DP的模板题; 因为窝太蒟蒻了,所以不会递推,只会记忆化搜索; 首先,咋暴力咋来; 将一个数分解成一个数组,这样以后方便调用; 数位DP的技巧:(用1~b的答案)-(1~a的答案)就是(a~b的答案); 那么对于每个数码i,我们做两次dfs(分别以a为上界和以b为上界); 设正
阅读全文
摘要:先说一句题外话,有谁看到的第一眼看成了某站的知名up主夏日祭?题面夏至祭是一场迎接祖灵于夏季归来同时祈求丰收的庆典。村里的男人会在广场上演出冬之军跟夏之军的战争,夏之军会打倒冬之军的大将冬男,再放火将他连山车一起烧掉。谢尔吉斯村长已经选好了N个人参加演出,其中一些人负责演夏之军,另一些人负责演冬之军
阅读全文
摘要:题面 首先你要知道题问的是什么:使用一种数据结构,动态地维护以1为起点地最长上升子序列(把楼房的高度转化成斜率地序列)的长度; 怎么做?线段树! 我们在线段树上维护两个东西:1.这个区间内斜率的最大值 2.从这段区间开头可以看到的区间内的所有楼房 初始化:对于每一个叶子节点,从这段区间头可以看到的楼
阅读全文
摘要:题面 这道题比较显然地,是一道树形背包; 但是会有环,怎么办呢? 缩点!tarjan缩点! 然后在新图上跑树形背包就可以AC了 #include <bits/stdc++.h> #define inc(i,a,b) for(register int i=a;i<=b;i++) using names
阅读全文
摘要:题面 这道题咋看都是无法从dp入手,那么就从数据结构入手!; 首先你要会权值线段树和线段树合并。 然后你要知道: 对于任意一个节点,交换左右子树对当前节点和前面的所有节点没有影响。 因为这是前序遍历:根节点->左子树->右子树。可以看到,交换左右子树对前面的节点无影响。 我们清楚,交换子树只会对该逆
阅读全文
摘要:这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版; 因为这不需要可持久化; 也就是说求任意两个数异或起来的第k大值; 首先把所有数放进trie里。 然后二分答案,枚举每个数,相应地在trie上从高位开始跑,统计答案。 具体做法:当前跑到二进制第k位,已经确定了比k高的位的数字,使得
阅读全文
摘要:题面 GarsiaWachs算法专门解决石子合并问题: 设一个序列是A[0..n-1],每次寻找最小的一个满足A[k-1]<=A[k+1]的k,那么我们就把A[k]与A[k-1]合并,并向前寻找一个第一个超过他们的和的数,把这个数插入到他后面;
阅读全文
摘要:题面 我们无论怎么走,都是要从此点沿最短路径走到终点,所以我们以n为原点跑两边dijkstra就可以了; 而抱怨数可以根据之前跑出来的东西新建一个图,然后跑最短路就好了;
阅读全文