模拟测试74

T1:

  将区间按左端点排序,点排序。

  依次扫每一个点,将所有满足条件的区间装入堆中,弹掉所有过期的区间。

  每次贪心取右端点最小的区间。

  时间复杂度$O(nlogn)$。

T2:

  把树放在森林中考虑。

  设$dp[i][j]$表示$i$个点的森林,有$j$个点在第一棵树的概率。

  然后$dp[i][j]=dp[i-1][j-1]*(j-1)*inv[i]+dp[i-1][j]*(i-j)*inv[i]$。

  手模一下发现$dp[i][j]=inv[i]$,于是$dp[i][j]$就废掉了......

  设$f[i][j]$表示有$i$个点的树,深度不超过$j$的概率,$g[i][j]$表示有$i$个点的森林,深度不超过$j$的概率。

  然后$f[i][j]=g[i-1][j-1]$,于是$f[i][j]$也废掉了......

  最后$g[i][j]=sum limits_{k=1}^i g[k-1][j-1]*g[i-k][j]*inv[i]$。

  时间复杂度$O(n^3)$。

T3:

  由于原图是一棵树,所以连通块个数=点数-边书。

  区间点数直接就区间长度,考虑如何求区间边数。

  把每一条边看成一条线段,问题转化为求区间包含的小区间数。

  把每条边存放在左端点处,用主席树维护右端点,直接求区间内值域内的数个数。

  时间复杂度$O(nlogn)$。

原文地址:https://www.cnblogs.com/hz-Rockstar/p/11679027.html