日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模板:Prufer序列

發布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模板:Prufer序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂 Prufer 序列,就是 Prufer 發明的序列。

(逃)

前言

優雅的神奇魔術。
看名字很高大難,但實際上是高大清(小清新)。
很簡單的建立起樹與序列之間的雙射,且這個序列的性質非常良好,且這個序列的性質與度數密切相關。
能優雅簡潔的證明一些惡心的結論。

注意! Prufer序列不考慮只有一個結點的樹。

解析

定義

把一棵樹轉化為 Prufer 序列的流程如下:

  • 找到當前度數為1且編號最小的點 xxx
  • xxx 點刪去,將唯一與 xxx 相連的點 fff (可以理解為以n作根情況下的“父親”)加入 Prufer 序列。
  • fff 的度數減一。
  • 不斷執行 1-3,直到只剩下兩個點。
  • 最終我們得到的長度為 n?2n-2n?2 的序列即最終的 Prufer 序列。

    性質

    其有如下性質:

  • 序列中的每個數都是 [1,n][1,n][1,n] 之間。
  • 一個度數為 dxd_xdx? 的點在序列中出現 dx?1d_x-1dx??1 次。
  • 最終剩下的兩個點中必然有一個點為 nnn
  • 都較為顯然。

    把樹轉化為 Prufer 序列

    利用 Prufer 序列的定義,開一個堆存當前的度數為1的點,即可 O(nlog?n)O(n\log n)O(nlogn) 的構造。
    但可以做到線性。
    維護一個指針 ppp,從1掃到n,表示當前編號最小的一度點。每次后移指針知道找到一個一度點,將其加入 Prufer 序列,如果父親減完度數變成了一度點且編號小于 ppp 則將父親加入序列,并遞歸的考慮祖父,否則直接忽略。
    注意這么做最后會得到一個 n?1n-1n?1 的序列,因為最后會把和 nnn 相連的點也刪去。把序列尾抹掉即可。

    for(int i=1;i<n;i++){fa[i]=read();du[i]++;du[fa[i]]++;}for(int p=1;p<n;p++){if(du[p]>1) continue;q[++tot]=fa[p];int f=fa[p];--du[f];while(du[f]==1&&f<p){q[++tot]=fa[f];f=fa[f];--du[f];}}--tot;

    把 Prufer 序列轉化為樹

    利用 Prufer 序列的性質2,我們可以得到每個點的度數。
    每次找到最小的一度點,它的父親就是當前序列的隊首元素,將其與隊首連邊,隊首的度數減一,并后移隊首指針。
    和樹轉化為 Prufer 序列類似的,我們也可以維護一個指針 ppp 做到線性。
    注意,由于 Prufer 序列的長度只有 n-2,我們必然只為 n-2 個結點分配了“父親”(即連了n-2條邊),最后我們最后找到那個沒有被分配父親的非 n 的點,將其與 n 相連即可。

    for(int i=1;i<=n;i++) du[i]=1;for(int i=1;i<=n-2;i++){q[i]=read();++du[q[i]];}int pl=1;for(int p=1;p<n&&pl<=n-2;p++){if(du[p]>1) continue;int x=p;while(x<=p&&du[x]==1&&pl<=n-2){fa[x]=q[pl];du[q[pl]]--;x=q[pl];++pl;}}for(int i=1;i<n;i++) if(!fa[i]) fa[i]=n;

    凱萊定理

    通過上面的構造我們可以知道,有標號無根樹和Prufer序列是雙射關系
    Prufer 序列的個數顯然為 nn?2n^{n-2}nn?2 個,那么我們也就自然得出了凱萊定理

    nnn 個結點的有標號無根樹有 nn?2n^{n-2}nn?2 個。

    總結

    以上是生活随笔為你收集整理的模板:Prufer序列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。