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
时间: 2024-10-01 05:29:52