題意:給出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雙親表示法採用順序表 也就是陣列 儲存普通樹,其實現的核心思想是 順序儲存各個節點的同時,給各節點附加乙個記錄其父節點位置的變數。注意,根節點沒有父節點 父節點又...