trie樹,兒子兄弟表示法 uva11732

2021-06-20 14:59:17 字數 834 閱讀 3525

題意:給出n個字串,進行兩兩比較,計算比較的次數。

剛開始用指標寫,發現這樣寫儲存資訊的時候不好計算,於是學習劉汝佳的兒子兄弟表示,這樣建樹統計分差點的比較次數是非常方便。

#include#include#include#includeusing namespace std;

const int maxn=4000*1000*10;

int n;

struct trie

void insert(char * a)

}if(!found)//找不到,新建節點

u=v;

tot[u]++;}}

void dfs(int depth,int u)

int sum=0;

for(int v=head[u];v!=0;v=next[v])

sum+=tot[v]*(tot[u]-tot[v]);

ans+=sum/2*(depth*2+1);

for(int v=head[u];v!=0;v=next[v])

dfs(depth+1,v);

}long long count()

}tree;

int main()

{ #ifndef online_judge

freopen("in.txt","r",stdin);

#endif

int t=1;

while(scanf("%d",&n)!=eof,n)

{char a[4010];

tree.clear();

for(int i=0;i

樹的表示 2 子女兄弟表示法

頭結點 struct node 1 建樹 通過給定樹的層次序列所有元素以及對應結點的度來構造樹。例如這樣一課樹 rad ebcf gh k它的層次遍歷為 rabcdefghk 對應結點的度為 3 2 0 1 0 0 3 0 0 0 建樹的演算法思路 先建立n個樹結點,給他們賦值並將指標初始化 然後掃...

樹 孩子兄弟表示法的實現

樹狀圖是一種資料結構,它是由n n 1 個有限節點組成乙個具有層次關係的集合。把它叫做 樹 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點 每個節點有零個或多個子節點 沒有父節點的節點稱為根節點 每乙個非根節點有且只有乙個父節點 除了根節點外,每個子節點可以分為多個不...

樹的雙親表示法,孩子表示法以及孩子兄弟表示法

目錄如下圖所示,這是一棵普通的樹,該如何儲存呢?通常,儲存具有普通樹結構資料的方法有 3 種 雙親表示法 孩子表示法 孩子兄弟表示法 圖1雙親表示法採用順序表 也就是陣列 儲存普通樹,其實現的核心思想是 順序儲存各個節點的同時,給各節點附加乙個記錄其父節點位置的變數。注意,根節點沒有父節點 父節點又...