HDU1213 聯通集裸題

2021-08-24 20:42:47 字數 1091 閱讀 7771

今天是伊格納修斯的生日。他邀請了很多朋友。現在是晚餐時間。伊格納修斯想知道他至少需要多少桌子。你必須注意到並非所有的朋友都互相認識,而且所有的朋友都不想和陌生人呆在一起。

這個問題的乙個重要規則是,如果我告訴你a知道b,b知道c,那意味著a,b,c彼此了解,所以他們可以留在乙個表中。

例如:如果我告訴你a知道b,b知道c,d知道e,所以a,b,c可以留在乙個表中,d,e必須留在另乙個表中。所以ignatius至少需要2張桌子。

輸入 輸入以整數t(1 <= t <= 25)開始,表示測試用例的數量。然後是t測試案例。每個測試用例以兩個整數n和m開始(1 <= n,m <= 1000)。n表示朋友的數量,朋友從1到n標記。然後m行跟隨。每一行由兩個整數a和b(a!= b)組成,這意味著朋友a和朋友b彼此了解。兩個案例之間會有乙個空白行。

產量 對於每個測試用例,只輸出ignatius至少需要多少個表。不要列印任何空白。

樣本輸入

2 5 3

1 2

2 3

4 55 1

2 5

樣本輸出 2 4

#include

#include

using

namespace

std;

int s[1005];

int n,m;

void init()

int find(int x)

void unionn(int x,int y)

int main()

for(int i=1;i<=n;i++)

printf("%d\n",cnt);

}return

0;}

1.

void init()

賦值每個人老大都是自己

2. void unionn(int x,int y)

聯合 如果倆個人老大不是乙個人,則讓a成為b的老大

3. int find(int x)

遞迴找老大,返回老大。

4. if(find(i)==i)

如果他是老大,則有一顆樹。

5i從1開始

hdu1213並查集模板

題意 n個人吃飯 給出認識的關係,認識的才能在一張桌子上吃飯,求最少需要幾張桌子 思路 沒給出兩人關係,放入 並查集中 最後查詢父節點的數目即可 include include include include include include using namespace std int n,m i...

hdu1213 並查集板子

並查集是一種支援合併與查詢的資料結構,在森林中進行操作,加上路徑壓縮,合併和查詢的時間複雜度幾乎都是常數。並查集最基礎的作用就是建立不同的點之間的所謂的 關係 並且查詢兩者是否有關係。並查集的乙個特點是向量型關係傳遞性,比如a b b c,則有a c,是不是特別像向量之間的傳遞?在很多時候並查集的應...

hdu1213解題報告

題目大意 太水了,都有點記不清了 解題思路 並查集來做,認識的人都find一發即可,最後在遍歷一遍,看有幾個p i i的,就有幾張桌子 include include include includeusing namespace std const int maxn 1000 10 int p ma...