题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以排序后dfs完成. 但是,当\(d_i\)相同时,可能存在这样一种情况:把编号小的子树内权值较大的节点,和某个编号较大的根交换后,仍然满足要求 比如\(N = 4, K = 2, a = {1, 1, 1, 2}\) 此时直接贪心的话会输出\(1, 1, 1, 2\),实际上最优解为\(1, 1,…
https://www.lydsy.com/JudgeOnline/problem.php?id=5249 把树建出来 如果所有的d互不相同,后续遍历即可 现在有的d相同 将d从小到大排序,考虑如何将这n个数填进树里 相当与为x的子树预订d序列中的一段 而且当且这个d填的位置越靠后越好 CTSC试机现场发题解,真爽... #include<cmath> #include<cstdio> #include<iostream> #include<algorithm&g…
https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某个数结尾的最长上升子序列产生影响 所以 先原序列求出来,输出即可 还原原序列的方法: 可以用平衡树,dfs序就是原序列 嫌麻烦,不想写,所以  树状数组 假设最后一个数是n,插入位置是y, 倒数第二个数是n-1,插入位置是x 那么y就是n的最终位置 如果y在x后面,那么x就是n-1的最终位置 如果y…
转化一下问题变成给定一棵树,一个序列,求父亲的权值小于子树的最大方案. 直接贪心会在有重复权值时出现错误,我们考虑用线段树优化贪心. 将序列从小到大排序,线段树上每个点记录他和他右边当前还可用的权值,注意这里我们并不一定维护的都是正确的,但是我们要保证我们需要用到的限制一定都体现了出来,比如 1 2 5 5 5 5 5 6 7 8 9 K=2,我们放第二个点时,会放到3这个位置,于是我们将1-3区间减7,这时候4-11的权值我们并没有修改,但是需要用到的限制只有前三个点,所以是正确的,之后我们每…
bzoj 5249 [2018多省省队联测] IIIDX Link Solution 首先想到贪心,直接按照从大到小的顺序在后序遍历上一个个填 但是这样会有大问题,就是有相同的数的时候,会使答案不优 比如考虑 \((1, 2)(1, 3)(2, 4)\) 这样一棵树,并且点权是 \({1,1,1,2}\) 那么直接贪心会使得答案为 \(v_1=1,v_2=1,v_3=1,v_4=2\),但是实际上最优解为 \(v_1=1,v_2=1,v_3=2,v_4=1\) 问题出在我们先考虑 \(v_2\)…
5249: [2018多省省队联测]IIIDX 链接 分析: 贪心. 将给定的权值从大到小排序,从第一个往后挨个赋值,考虑第i个位置可以赋值那些树.首先满足前面必须至少有siz[i]个权值没选,如果存在相同的数,尽量往后选. 那么可以给每个权值记录一个值F[i],表示i左边可以选多少个权值了.还要和后面的取一个最小值才是真正的能选多少个. 在线段树上分治找到这个位置. 注意在bzoj上,fa[i]=int(1.0*i/k) 有精度误差,而写成floor就可以了. 代码: #include<cst…
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j 位置的数是区间[i,j]的最大值和次大值 提供p2的攻击力:i,j位置的数有一个是区间[i,j]的最大值,另一个不是次大值 记录L[i].R[i] 分别表示i左右第一个大于k[i]的位置 p1的贡献: 1.点对(L[i],R[i])    2.点对(i,i+1) p2的贡献: 1.点对(L[i],…
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色之后,任意满足要求的四联通块一定可以是 黑色-->紫左-->紫右-->白色 只要破坏三个箭头中的一个即可 所以可以构建最小割模型 1.源点向黑色格连流量为格子代价的边 2.黑色格向相邻的紫色格连inf边 3.与黑色格相邻的紫色格向与白色格相邻的紫色格连 流量 为 两个紫色格较小代价 的边 4…
https://www.lydsy.com/JudgeOnline/problem.php?id=5251 第一问: 左边一列点代表学生,右边一列点代表导师 导师向汇点连流量为 人数限制的 边 然后从第一个学生的第一志愿往里面加边 如果当前学生的当前志愿可以满足,即目前网络流可以满流,保留这一志愿的边,然后下一个学生 否则,删除这一志愿的边,然后下一个志愿 第二问: 二分这个学生要前进多少名 假设是学生i要前进x名 把前i-x-1名的学生 在第一问中满足的志愿 的边加进去 在把学生i的边加进去…
https://www.lydsy.com/JudgeOnline/problem.php?id=5248 先手希望先手得分减后手得分最大,后手希望先手得分减后手得分最小 棋盘的局面一定是阶梯状,且从上往下递减 可以将轮廓线作为状态,记忆化搜索 用n个数表示一个状态,第i个数表示第i行放了几个 记忆的状态表示当棋盘为这个状态时,接下来再下的最有解 记忆化搜索节省的是接下来再下的时间 #include<map> #include<cstdio> #include<cstring…