題目中生成樹的方式可以生成任何一種形狀的
n 節點樹。
這是因為樹也是da
g圖.任何形狀的樹,都可以拓撲排序後重新標號。
我們計算這種方式生成的樹的期望深度。其實就是隨機生成一棵樹的期望深度。
但是平均不代表不能代表特殊。
更具體來說,對於
n 個節點的隨機樹。最大深度超過
h時候大概率是多少?(是否有絕對的概率優勢)。
這裡只能給出平均意義下的樹的深度。出現教壞情況的概率應該不會很大。
首先。第
n 個結點可能深度是多少呢?
演算法可以看作我們從節點
n開始.每次隨機的選擇乙個之前的節點。去跳躍。每次跳躍距離都不超過到達節點
1 的距離的一半概率近似為o(
12)
連續k次跳躍。出現這種情況的概率顯然隨著
k的增加收斂很快。o(
(12)
k)。但這個分析很不嚴謹。能力有限。不能給出準確的概率分布。
但可以看出。出現壞的情況的概率不會很大。
那麼平均意義下的結論還是值得使用的。
定義。節點
n 的平均深度為 f(
n)下面是ac**:
#include
#include
#include
#include
#define maxn 500005
#define child 1000
using
namespace
std;
const
int inf=0x3f3f3f3f;
struct io
void io_fread()
void read(int &tmp)
while(*l<'0'||*l>'9')
}while(*l>='0'&&*l<='9')}}
}i;struct prob
; bool
operator
<(const prob&a)const
}q[maxn];
int len[maxn][61];
int ph[maxn];
int dp[child];
int main ()
sort(q,q+q);
memset(len,0x3f,sizeof len);
memset(dp,0x3f,sizeof dp);
for(int d=n;d;d--)
for(int k=0;len[d][k]if(len[p][k+1]>len[d][k])
len[p][k+1]=len[d][k];
while(c=d)
}printf("%d\n",ans);
return
0;}
51nod1803 森林直徑
題目看這裡 為什麼xheditor不能支援字型了,不管了,那就用markdown吧 乙個非常有意思的題目,首先考慮離線做法,把所有的詢問按照l排序,所有的邊倒序插入整個樹中 我們需要維護兩個東西 1.f x i 表示當整顆樹有 x,f x i 這乙個區間內的所有邊時,以x為根的子樹存在乙個深度為i的...
51nod1803 森林直徑
題目看這裡 為什麼xheditor不能支援字型了,不管了,那就用markdown吧 乙個非常有意思的題目,首先考慮離線做法,把所有的詢問按照l排序,所有的邊倒序插入整個樹中 我們需要維護兩個東西 1.f x i 表示當整顆樹有 x,f x i 這乙個區間內的所有邊時,以x為根的子樹存在乙個深度為i的...
51Nod1367 完美森林 貪心
有一棵n個點的樹,樹中節點標號依次為0,1,2,n 1,其中n 500000。樹中有n 1條邊,這些邊長度不一定相同。現在要把樹中一些邊刪除,設刪除了k條邊 k 0,即可以不刪除任何邊 由樹的性質可知,該樹將被分割為乙個含有k 1棵樹的森林。稱乙個森林是 完美森林 要求這個森林中的每一棵樹滿足 該樹...