PTA刷題 甲級 並查集,堆,哈夫曼

2021-10-09 12:39:43 字數 2268 閱讀 6175

並查集就是把節點放在陣列list裡面,初始化讓list裡面的每個位置都等於該位置角標。之後填入資料(用union),union就是先找根,如果根不一樣,就把aroot並到broot底下。完成填入操作後,如果list裡面的某個i還是角標本身,就說明這個點是根節點。

pta 1107 social clusters

大意是給了n個人,每個人有一些愛好,如果有相同愛好就是好朋友。這樣的話就會形成乙個好朋友社交圈。為你最後有幾個這樣的大圈。

解:

用乙個course陣列儲存愛好,一開始都是0,當第一次出現某個人有這個愛好的時候,就把course陣列裡面對應的愛好記成這個人的編號。這樣下次出現這個愛好的時候,就把下次出現的人的編號和已經儲存的編號相連。 這樣就完成了list填入。

之後都是常規操作了。

核心還是要會寫findroot以及union函式。

#include

#include

#include

using

namespace std;

const

int maxnum =

1005

;const

int hobbynum =

1001

;int course[hobbynum]=;

int list[maxnum]

;void

intil()

intfindroot

(int a)

//找某節點的根

void

union

(int a,

int b)

bool

cmp(

int a,

int b)

intmain()

}}int differgroups =0;

vector<

int>

res(n+1)

;//計算人數的雜湊表

for(

int i =

1; i <= n; i++

)sort

(res.

begin()

, res.

end(

), cmp)

;//排序輸出

cout << differgroups <<

"\n"

;for

(int i =

0; i < differgroups; i++

)return0;

}

用時:60min

大意:給你一組層序遍歷的序列,讓你判斷這個完全二叉樹是不是堆,並且是哪種堆。

思路:根據vec[1]和vec[0]來先初步判斷是哪種堆。然後寫出具體的判斷程式,拿兒子和根比較來判斷。

注意:全域性變數ismax和ismin要重置!(這個bug浪費了半個多小時)

#include

#include

using

namespace std;

vector<

int> vec;

vector<

int> res;

int ismax =

1, ismin =1;

void

ismaxheap

(int i,

int len)

if(right < len)

}void

isminheap

(int i,

int len)

if(right < len)

}void

postorder

(int i,

int len)

intmain()

if(vec[1]

<= vec[0]

)//疑似大頂堆

else

if(vec[1]

>= vec[0]

)//疑似小頂堆

postorder(0

,n);

for(

int i =

0; i < n; i++

) cout <<

"\n"

; vec.

clear()

;//清除,為下一組做準備

res.

clear()

; ismax =

1,ismin =1;

//復位

}return0;

}

python刷題 並查集

class unionfind def init self self.co 0 用於記錄群的個數 self.parent 索引是每個節點本身,值是每個節點的父節點 self.size 用於記錄每個群的節點數目 def find self,x while self.parent x x self.pa...

PTA刷題 甲級 拓撲排序

拓撲排序以前不考,現在考的頻率好高。其實沒啥難的,抓住一點 入度為0時,才能被輸出 或者被選中,乙個意思 所以要用個int indegree來維護入度的數量。當要我們判斷乙個圖能不能是拓撲排序 即沒有環 就是看入過佇列的節點數是不是就是n。例題 大意 給你乙個圖,讓你判斷能不能拓撲排序。輸入資料 輸...

pat甲級1107 並查集

並查集在findfather 函式中進行壓縮路徑,陷阱是這裡只壓縮該結點以上到根的路徑,其以下的路徑不壓縮,這裡不搞清楚會有三個測試點過不去 include include include using namespace std int n vector int hobby 1001 int fat...