並查集樹資料結構hdu1325

2022-08-21 20:48:13 字數 965 閱讀 9431

我的解法就是去構造了一棵樹

以陣列的儲存方式

陣列的值存放節點的根。

排除空樹

剩下的就是出現環和多根節點的情況

也就是排除森林和有乙個節點多個入度的情況

排除森林就用到了並查集

也就是便利陣列讓其僅僅有乙個根

排除多個入度的情況更簡單

就是把這個點插入到數上時

假設這個點已經有了根節點,就出現了兩個入度

#include#include#includeusing namespace std;

int sett[1000 + 100],g[1000 + 100];

int find2(int x)

int main()

int countt=0;

for(int i=1;i<=1000;i++) if(g[i]&&sett[i]==i) countt++;

// printf("countt %d\n",countt);

if(countt > 1) flag=0;

// printf("flag %d\n",flag

if(flag) printf("case %d is a tree.\n",cases);

else printf("case %d is not a tree.\n",cases);

cases++;

// for(int i=1;i<=10;i++)

// printf("%d ",i);

// printf("\n");

// for(int i=1;i<=10;i++)

// printf("%d ",sett[i]);

// printf("\n");

}return 0;

}

hdu 1325 並查集 判斷是不是一顆樹

這道題坑了我好久啊!必須寫下來 首先必須的清楚如何判斷是不是一顆樹就本題而言 1 整個圖中只能有乙個根節點,如果根節點的個數大於1個,那麼就不是樹了,而是森林。2 不能成環,也就是說兩個點之間只能有一條路徑到達,這裡可以用並查集中的並操作進行判斷 3 如果a b,必須判斷b是不是根節點,加入b不是根...

資料結構之樹(並查集)

0,2,4,6,8的標籤為0。1,3,5,7,9的標籤為1。標籤為0和1表示兩個不同的集合。查詢元素p所對應的集合編號,o 1 複雜度 private intfind int p 檢視元素p和元素q是否所屬乙個集合,o 1 複雜度 public boolean isconnected int p,i...

《資料結構》並查集與樹

查 給定乙個元素,查詢它在哪個集合內 並 合併兩個元素所在的集合 元素 結點 集合 樹 多個集合 森林 用樹的根節點作為不同樹的標誌 合併時只需要將根節點鏈結 用陣列表示樹,陣列下標表示元素值,陣列的值表示該元素對應的父親結點 father i j 元素i的父親結點是j 對於根節點 father i...