题目描述 分析 考虑自底向上贪心 \(f[x][k]\) 表示 \(x\) 下面距离为 \(k\) 的需要灭火器的房间数,\(g[x][k]\) 表示 \(x\) 下面距离为 \(k\) 的多余灭火器数 每个灭火器和房间的匹配在 \(lca\) 处处理 每次假设子树里已经最优了,那么 \(f[x][k]\) 一定要用 \(g[x][0]\) 填满 然后距离为 \(k\) 的一定会在 \(x\) 处匹配掉,否则到上面不会更 优(可以交叉互换) 在不存在距离为 \(k\) 的前提下,\(k-1\)…
我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( i \) 是( 0)否(1)为一条链的端点 然后贪心转移即可(有链端点则连起来) #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=10005; i…
题面 ⼩ w ⼼⾥的⽕焰就要被熄灭了. 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树. 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个. 接下来每个节点都要被分配给⼀个⾄多 k 条边远的灭⽕器,每个灭⽕器最多能分配给 s 个节 点. ⾄少要多少个灭⽕器才能让⼩ w 彻底死⼼呢? 题解 树形DP,由于k≤20k\le 20k≤20,用f[i][j]f[i][j]f[i][j]存iii这个点下面距离为jjj的未匹配点有多少个,g[i][j]g[i][j]g[i][…
只看45分的话,是树形DP....(当然也有能拿到70分+的大佬) 40分: 只考虑k==1的情况,树形DP 所以每个节点可能被父亲,自己,儿子控制 设f[MAXN][3],0表示儿子,1表示自己,2表示父亲 f[i][1]+=min(f[to][0],f[to][1],f[to][2])(因为自己控制自己,儿子怎样都行) f[i][0]+=min(f[to][0],f[to][1]) 但是因为i的儿子必须有一个自己控制自己,所以还要判断所加值中是否有f[to][1],如果没有 f[i][0]+…
题目链接: 咕 闲扯: 这题考场上把子任务都敲满了,5个namespace,400行11k 结果爆0了哈哈,因为写了个假快读只能读入一位数,所以手测数据都过了,交上去全TLE了 把边分成三类:0. 需要染色的 1. 不需要染色的 2. 染不染色无所谓 考场上首先发现一个性质,就是一定存在一种最优解没有染任何一条本来不需要的染色边. 为啥?其实也挺显然的,因为你染色跨过这条边还得染这条边一次,不如直接只染左右的联通块,这样总路径长度还能更小 但是第三种边的呢?有个子任务就是枚举它染不染. 然后链上…
啊啊啊啊啊啊啊啊考场上差一点就A掉了5555 千里之堤溃于蚁穴……鬼知道最后一步那么显然的柿子我为什么没考虑用上…… 观察数据范围可知,出题人期望我们想出一个$O(n)$的做法 当然也有可能是$O(nlogn)$,但是这道题所求的数值与树上每个点的权值有关, 似乎用点分治并不能够解决. 那怎么办?树形dp啊.保证严格$O(n)$. 有了这样的思路,我们先来看第一问,并设计一个可以用一遍dfs计算出数组$b[]$的算法. 各位想必知道,树形dp的基本思想是$"Up\ and\ Down"…
该补一下以前挖的坑了 先总结一下 第二次 T1 搜索+剪枝 #include<cstdio> #include<iostream> #define ll long long using namespace std; ; int a[maxn],n,js[maxn]; bool jk[maxn]; ll ans; bool judge(int l,int r) { int i=l; while(i<r) { !=a[i+]); else i++; } ; } void out(…
题目传送门(内部题46) 输入格式 第一行$3$个整数$n,m,t$.第二行$n$个整数,表示$P_i$.接下来$m$行每行两个整数,表示$L_i,R_i$. 输出格式 一行一个整数表示答案. 样例 样例输入: 3 3 26 2 51 12 23 3 样例输出: 数据范围与提示 样例解释: 最优方案为使用$2$次特殊加热器,$4$次$1$号加热器,$3$次$3$号加热器. 数据范围: 对于前$20\%$的数据:$t\geqslant n$对于另$30\%$的数据:$P_i\leqslant 30…
题目描述 小$w$心里的火焰就要被熄灭了. 简便起见,假设小$w$的内心是一棵$n-1$条边,$n$个节点的树. 现在你要在每个节点里放一些个灭火器,每个节点可以放任意多个. 接下来每个节点都要被分配给一个至多$k$条边远的灭火器,每个灭火器最多能分配给$s$个节点. 至少要多少个灭火器才能让小$w$彻底死心呢? 输入格式 第一行三个整数$n,s,k$. 接下来$n-1$行每行两个整数表示一条边. 输出格式 一行一个整数表示答案 样例 样例输入: 10 10 31 82 31 52 41 28…
题目描述 在“无限神机”的核心上,有一个奇怪的括号密码,密码初始已经有一个括号序列,有$n$个限制条件,每个限制条件描述为$l_i$和$r_i$,表示区间$[l_i,r_i]$的括号序列必须合法.调整密码只有一种方式:交换括号序列的任意两个字符.求使得密码满足所有条件最少的交换次数.括号序列合法定义为: $1.$空串$""$是一个合法的括号序列 $2.$如果$"X"$和$"Y"$是合法的括号序列,则$"XY"$(连接$X$和$…
题目传送门(内部题62) 输入格式 第一行有一个整数$n$.第二行有$N$个整数:$a_1\ a_2\ a_3\cdot\cdot\cdot a_n$. 输出格式 一行一个整数表示最大收益. 样例 样例输入: 51 1 5 3 6 样例输出: 9 数据范围与提示 样例解释: 第$1,2$天分别买入一件货物,第$3,5$天分别卖出一件货物,第$4$天不进行交易. $-1-1+5+6=9$. 数据范围: 对于所有数据,$n\leqslant 10^5$,$0\leqslant a_i\leqslan…
题目描述 给定一张$n$个点$m$条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通你想在这张图上进行若干次旅游,每次旅游可以任选一个点$x$作为起点,再走到一个与 $x$直接有边相连的点$y$,再走到一个与$y$直接有边相连的点$z$并结束本次旅游 作为一个旅游爱好者,你不希望经过任意一条边超过一次,注意一条边不能即正向走一次又反向走一次,注意点可以经过多次,在满足此条件下,你希望进行尽可能多次的旅游,请计算出最多能进行的旅游次数并输出任意一种方案 输入格式 第$1$行两个正整数$n…
题目传送门(内部题15) 输入格式 第一行一个整数$n$,代表点数接下来$n-1$行,每行三个数$x,y,z$,代表点$i$与$x$之间有一条边,若$y$为$0$代表初始为白色,否则为黑色,若$z$为$0$代表不对最终颜色做要求,否则代表要求为黑色. 输出格式 达到目的的最少操作多少次数. 样例 样例输入: 71 0 11 1 12 0 12 0 13 1 13 0 1 样例输出: 数据范围与提示 对于$30\%$的数据,所有的$x$等于$1$.对于$70\%$的数据,所有边最终都必须为黑色对于…
题目传送门(内部题51) 输入格式 第一行一个整数$t$表示数据组数.每组数据的第一行有三个整数$s,k,n$.第二行有$n$个整数$A_1,A_2,...,A_n$,依次表示黑白条的长度. 输出格式 若能通过输出$"TAK"$,否则输出$"NIE"$. 样例 样例输入: 22 8 72 5 6 3 2 1 22 8 41 6 7 4 样例输出: TAKNIE 数据范围与提示 样例解释: 数据范围: $30\%$的数据,$n\leqslant 1300$: $50\…
题目描述 分析 \(n^2\) 的 \(dp\) 应该比较好想 设 \(f[i][j]\) 为当前在第 \(i\) 天剩余的货物数量为 \(j\) 时的最大收益 那么它可以由 \(f[i-1][j]\),\(f[i-1][j+1]\)和\(f[i-1][j-1]\) 转移过来 用滚动数组能压掉一维 正解类似于可撤销贪心 我们开一个小根堆存放物品 每次取出堆中最小的物品和当前物品比较大小 如果比当前物品大,直接把当前物品扔进堆里 否则我们买入堆顶的物品,在当前卖出,累加贡献,弹出堆顶 并在堆里加入…
题目描述 这题太虎了,所以没有背景. 给你一棵树,边有黑白两种颜色,你每次可以选择两个点,把这两个点之间的唯一简单路径上的所有边颜色取反,某些边要求最终颜色必须是黑色,还有些边没有要求,问最少操作多少次能达到目的 输入格式 第一行一个整数 \(n\),代表点数 接下来\(n-1\)行,每行三个数\(x,y,z\),代表点 \(i\) 与点 \(x\) 之间有一条边,若 \(y\) 为 \(0\) 代表初始为白色,否则为黑色,若\(z\)为\(0\)代表不对最终颜色做要求,否则代表要求为黑色. 输…
题目描述 \(duyege\) 的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,\(duyege\) 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 \(v_i\)的金坷垃 或者除掉最新\(v_i\) 层(不是量)撒的金坷垃.如果上面只留有不足\(v_i\) 层金坷垃,那么就相当于电脑上面没有金坷垃了. \(duyege\) 非常严谨,一开始先给你 \(m\) 个上述操作要你依次完成. 然后又对实验步骤进行了\(q\)次更改,…
幸亏考场上没考这个,T1结论T2不会T3板子.估计会死的更惨 T1是学长讲过的Cat变式,沿直线y=x+1翻折方案数相减,现推,15分钟弄出来没什么问题. 只要不要把m,n读反就行. T3是个tarjan缩scc的板子.复习一遍,默写一遍,板子炸了. 然后拓扑也炸了.就最麻烦的建边没挂. 数据范围及其愚蠢,但是的确没有n2以下的做法.数组开够注意细节即可. T2我感觉starsing写的相当好,至少我对题解里莫名其妙的二分感到迷茫. 没有做,没时间了,题目不错,是个表达式化简的初级题目,挺好的.…
两机房分开考试.拿到了令人orz的A卷. 15本校+3外校=18人参加 排名第7,没前途.大不了去第二机房... skyh也很强了.tdcp拿来一个诡异的. 86,85,79.然后是我垃圾的.在后面差距也不大...(本来就没几分) 题很好.子任务评测很公正,分数也有梯度,知识点考得也不错. (而且超喜欢那个题目背景里几乎与题目毫无关联的英文诗) 就是我考得差了点. 这次考试长了10分钟,对我来说还挺关键的. 过一遍三道题,T1是组合计数什么的,数据范围不大,应该还可做. T2是一个看起来怪裸的欧…
这次考试后面心态爆炸了...发现刚了2h的T2是假的之后就扔掉了,草率地打了个骗分 T1只会搜索和m=0 最先做的T3,主要是发现部分分很多,当时第一眼看上去有87分(眼瞎了). 后来想了想,感觉一条链不可做,69分 码出来69分之后去测了一下第二个大样例,发现跑了2.6s,心态爆炸,预计得分47 出分之后发现把4000的22分拿到了,有69分. 于是成功凭借T3苟进rk3 T1. 是个容斥好题,考场上一直在想如何对点容斥,想到考试结束也没想出来. 正解是容斥边. T2. 欧拉回路 T3. 考试…
T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans=C(n+m,n)-C(n+m,m-1)$ #include<iostream> #include<cstdio> #include<cstring> #define mod 20100403 #define ll long long using namespace std…
题目传送门(内部题136) 输入格式 输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$. 输出格式 输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作后,字符串$s$可能达到的最大的$m$指标. 样例 样例输入: 6 3abacba 样例输出: 数据范围与提示 对于$40\%$的数据,满足$n\leqslant 10$. 对于$70\%$的数据,满足$n\leqslant 200$. 对于$100\%$的数据,满足$1\leqslant n\le…
题目描述 分析 定义出\(dp[i][j]\)为第\(i\)列涂\(j\)种颜色的方案数 然后我们要解决几个问题 首先是求出某一列涂恰好\(i\)种颜色的方案数\(d[i]\) 如果没有限制必须涂\(i\)种,而是有的颜色可以不涂,那么方案数为\(i^n\) 为了避免少涂的情况,我们减去只涂\(1 \sim i-1\)种颜色的方案数 即\(d[i]=i^n-\sum_{j=1}^{i-1}C_i^j \times d[j]\) 初始化为\(d[1]=1\) 接下来考虑转移 \(f[i][j]=f…
题目描述 分析 对于测试点\(1\).\(2\),直接搜索即可 对于测试点\(3 \sim 6\),树退化成一条链,我们可以将其看成序列上的染色问题,用线段树维护颜色相同的最长序列 对于测试点\(7\).\(8\),肯定是车的速度越大能经过的道路越少,所以我们用类似并查集的方法从大到小依次维护联通块的直径,这里要用到一个结论:如果两个点集\(A\).\(B\)的直径分别为\((v_1,v_2)(u_1,u_2)\),那么\(A \cup B\)的直径一定出现在这\(C_4^2\)种选择之中,只要…
题目描述 分析 方法一(线段树) 线段树维护的是以当前节点为左端点的区间的贡献 而区间的右端点则会从 \(1\) 到 \(n\) 逐渐右移 当我们把右端点从 \(i-1\) 的位置扩展到 \(i\) 的位置时 如果原先区间的最近公共祖先到根节点的路径中经过 \(a[i-1]\) 和 \(a[i]\) 的最近公共祖先 那么我们直接把这些区间的价值累加到 \(a[i-1]\) 和 \(a[i]\) 的最近公共祖先上 同时将其子树清空,还要把 \(a[i]\) 位置上的贡献加一 每次移完右端点后都要统…
题目描述 分析 \(80\) 分的暴力都打出来了还是没有想到莫队 首先对于 \(s[n][m]\) 我们可以很快地由它推到 \(s[n][m+1]\) 和 \(s[n][m-1]\) 即 \(s[n][m+1]=s[n][m]+C_n^{m+1}\) \(s[n][m-1]=s[n][m]-C_n^m\) 然后我们考虑怎么由 \(s[n][m]\) 推到 \(s[n-1][m]\) 和 \(s[n+1][m]\) 其实画出杨辉三角观察性质即可 摘自 \({\color{black}{M}}{\c…
题目描述 分析 我们要找的是一段区间的和减去该区间的最大值能否被 \(k\) 整除 那么对于一段区间,我们可以先找出区间中的最大值 然后枚举最大值左边的后缀与最大值右边的前缀之和是否能被 \(k\) 整除 显然暴力枚举肯定会超时 所以我们可以用启发式合并的思想,只枚举长度较小的那一半,而在某种数据结构中查询另一半对应的值 查询的过程可以用主席树,但是常数巨大 其实我们可以对于每一个 \(\%k\) 后的前缀和开一个 \(vector\) \(vector\) 中存放该值出现的位置 然后大力二分即…
题目描述 分析 对于 \(Subtask\ 1\),可以写一个 \(n^3\) 的 \(DP\),\(f[i][j]\) 代表第 \(i\) 个建筑高度为 \(j\) 时的最小花费,随便转移即可 时间复杂度 \(O(n \times h^2)\) 对于 \(Subtask\ 2\),我们沿用 \(Subtask\ 1\)的思路,记录前缀后缀 \(min\),将复杂度优化至 \(O(n \times h)\) 但是显然两维的定义无法继续进行优化,我们可以考虑改变一下定义的方式 设 \(f[i]\)…
题目描述 分析 首先,容易发现一个小组内的最优配对方式(能得到最大综合实力的方式) 一定是实力值最大的男生和最大的女生配对,次大的和次大的配对,以此类推. 但是每次新插入一个值时,需要用 \(nlogn\) 的时间复杂度去维护这个最大实力值 如果暴力去扩展时间效率是无法接受的 然后我们会发现答案具有单调性,可以枚举一个左区间,然后二分查找右区间 但是当遇到每一组的人数很小的情况时,二分会被卡成 \(n^2 logn\) 因此我们需要先用倍增处理出二分的区间 在处理出的区间里进行二分查找 这样,当…
题目描述 分析 \(\sum_{i=0}^p[(p|qi)?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|qi/gcd(p,q))?0:1]=\sum_{i=0}^p[(p/gcd(p,q)|i)?0:1]=p-p/gcd(p,q)\) 代码 #include<cstdio> long long t,p,q,ans; long long gcd(long long aa,long long bb){ if(bb==0) return aa; return gcd(bb,aa%bb…