Luogu P6815 [PA2009] Cakes 题解】的更多相关文章

题意 给定一个 \(n\) 个点 \(m\) 条边的图,点 \(i\) 有权值 \(a_i\),一个三元环 \((i,j,k)\) 的贡献为 \(\max(a_i,a_j,a_k)\),求所有三元环的贡献之和. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 3\times 10^5\) 题解 所谓的三元环计数其实就是个优雅的暴力. 考虑将原图的边定向:度数大的连向度数小的,度数一样则编号大的连向编号小的.我们可以发现这个图有一些特殊性质:…
题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的做法. 读题推一下样例不难发现,如果选择一个分支节点就必须走到头--直到一个节点没有子树. 那么我们就可以贪心的求得最小字典序序列,每次选择节点编号最小的走. 即对当前节点的所有子节点排序选择最小编号的往下进行即可. 60分code: #include <cstdio> #include <…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k)其贡献为max(a[i],a[j],a[k]),请你求出贡献值之和. [题解] 我们将无向边转化成从权值大的点指向权值小的点的有向边,按权值从小到大的顺序枚举起始点,枚举相连的点,如果其出度小于sqrt(m),那么枚举与其相连的点,判断是否和起始点相连,否则,枚举起始点相连的点,判断是否和枚举点相…
题目链接:https://www.luogu.org/problemnew/show/P2831 写点做题总结:dp,搜索,重在设计状态,状态设的好,转移起来也方便. 对于一条抛物线,三点确定.(0,0)是固定的,所以我们一条抛物线要用两只猪确定.再多的猪就只能用来判断是不是在这条抛物线上了. 于是我们把猪分成两种:在已有方程里的猪,单独的猪还没有确定方程. 那么对于一只猪,就会有被以前方程覆盖/和前面单独的猪构成新抛物线/自己单独. #include <cmath> #include <…
题目链接:https://www.luogu.org/problemnew/show/P2827 35分:暴力sortO(mnlogn). 80分:考虑到每次不好维护不被切的点+q,正难则反.改成维护被切的点-q,再维护一个q*m,跑大根堆O(mlogn). 100分:考虑到先切的点一定比后切的点分出来的大. 若切两个点a,b.a > b,a切成a1 > a2,T秒后,切b,b1 > b2 此时a1 = Tq + pa,a2 = Tq + (1-p)a, b1 = pTq + pb,b2…
题目链接:https://www.luogu.org/problemnew/show/P3959 我只是心血来潮想学SA(考场上骗分总行吧). 这个题可以状压DP.爆搜+剪枝.有意思的还是随机化搜索(是的,这个题用的不叫SA,没有降温). code: #include <queue> #include <ctime> #include <cstdio> #include <cstdlib> #include <cstring> #include…
题目链接:https://www.luogu.org/problemnew/show/P3410 这个题就是求一个最大权闭合图 在一个图中,一些点构成一个集合,且集合中的出边指向的终点也在这个集合中,则我们称这个集合为闭合图. 整个图中点的权值之和最大的闭合图,为最大权闭合图. 最大权闭合图可以用网络流来求 造出一个超级源点S和一个超级汇点T,把S连边到所有带有正权的点上,容量是这个点的权:把所有带负权的点连边到T,容量是这个点的权的相反数.原来的边呢,把它们的容量都设成无限大. (带负权的是员…
题目链接:https://www.luogu.org/problemnew/show/P1113 菜 #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 50000 + 10; const int inf = 0x7fffffff; i…
题目链接:https://www.luogu.org/problemnew/show/P4114 1.把边权转化到点权:选取连接这条边的两个点中较深的一个. 2.查询点到点之间的边权时,要从seg[x]+1 到 seg[y],因为seg[x]其实连接的是上面一条边的边权. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long…
题目链接:https://www.luogu.org/problemnew/show/P3979 除了换根操作都是裸的树剖 所以换根时考虑: 1.我查询的根等于换的根:无影响 2.我查询的根是换的根的子树:无影响 3.我查询的根是换的根的祖先:查询 除换的根及其往上直到为要查询的根的第一层儿子的祖先(设为S)的子树 以外的所有节点 (此时满足seg[S] <= seg[root] <= seg[S]+size[S]-1) 求LCA 查询1到seg[S]-1 和 seg[S]+size[S]到n…