模拟测试20191104

$T1:组合$

的欧拉路径

$Hierholzer$跑一遍可以得到经过点的顺序

那个$map+vector$映射一下就可以得到经过的边了

 

$T2:统计$

首先设$f_{i}$表示i以后比$a_{i}$小的数的个数

那答案就是$sumlimits_{i=1}^{n}f_{i}$

我们发现每次排序对答案的影响只在于被排序点的f归零

而每个点其实只需要改变一次

用线段树维护一下区间最小值就行了

 

$T3:点亮$

好久没有做过的一种$树p$类型

设$dp_{i,j,sta}$表示根到i的路径上点的状态为$sta$,$i$子树中点亮了$j$个点时的最大值

在每个点暴力合并子树跑背包,复杂度为$sumlimits_{i=1}^{n}2^{dep_{i}} imes sz_{i}^{2}$

然而由于树随机生成,分析得到总复杂度约为$O(n^{2})$

注意$dp$数组直接开不下,可以用$vector$进行$dp$

因为状态数只有$sumlimits_{i=1}^{n}2^{dep_{i}} imes sz_{i}$

 

原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11795097.html