(並查集第一課) 冗餘關係 樹 森林

2021-07-09 04:10:54 字數 1148 閱讀 2002

蒜頭最近在沉迷**,尤其是人物關係複雜的言情**。它看到的人物關係描述得很的麻煩的時候覺得非常蒜疼,尤其是人物關係裡有冗餘的時候。什麼是冗餘關係呢?

這篇**裡有n句描述人物關係的句子,描述了n個人的關係。

每條句子的定義是這樣的:

x<->y    它的意思是:x認識y,y也認識x

我們認為**中的人物關係是具有傳遞性的,假如a認識b,b認識c,則a也認識c。

冗餘關係的定義:就是即使沒有這條人物關係,原來的人物之間的所有關係也照樣成立。

比如:**中已經提到了a認識b,b也認識c。在此之後再講a認識c就是乙個冗餘的關係。

小蒜頭想求出一共有多少條冗餘關係,你能幫幫它嗎?也許並查集能幫上忙哦。

輸入格式:

第一行兩個整數,表示句子數量n(1<=n<=1000),表示人數m(1<=m<=1000)。

接下來n行,每行兩個數,表示一組人物關係。

輸出格式:

乙個整數,表示冗餘關係的數目。

樣例1輸入:

3 3

1 21 3

2 3

輸出:

1

人物的認識是雙向的,這樣可以認為乙個人的社交圈子構成一棵樹,這棵樹中每個人都互相認識。

這也意味著每次輸入的資訊都觸發一次森林的更新,也就是把這次資訊記載的兩個人所在的樹合併成乙個。

合併時還需要判斷,如果原來屬於同一棵樹,這就是乙個冗餘資訊,所以把計數加一。

#include #include using namespace std;

int fa[2000];

// 還記得之前閱讀課裡講的並查集演算法

// father函式返回的是節點x的祖先節點

int father(int x)

// 合併兩個節點所在集合,同時判斷兩個點之前是否在乙個集合裡

// 函式返回true則之前兩個點不在乙個集合中

bool join(int x, int y)

else

}// 初始化乙個n個點的並查集

void init(int n)

int main()

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

return 0;

}

冗餘關係 並查集

太原成成中學第3次模擬賽 第4題 mrs.chen是乙個很認真很稱職的語文老師 所以,當她看到學生作文裡的人物關係描述得非常的麻煩的時候,她非常生氣,於是宣布 凡是作文裡有冗餘關係的,一率罰抄出師表10次.同學們非常的恐懼,於是,每當他們寫出一篇作文,都要拿來你這個語文兼oi天才這裡,問你有沒有冗餘...

開學第一課

因為是開學第一課,而且這是我的第一篇個人部落格,更何況還是技術部落格,所以我會認真對待,不過畢竟第一次,所以難免各方面會有不足,所以有任何的意見或建議都可以提出來以供本人提高。下面廢話少說,進入正題。使用quartus,新建乙個專案,建立乙個bdf檔案,雙擊bdf空白處,新增元件符號。找到 7413...

鋼琴第一課

哇 昨天去上了第一節鋼琴課,好開心好開心 核心要義 感覺自己像個小公主 儀態儀容 屁股只能坐一半 身體保持正直 手非常溫柔非常輕鬆地搭到琴鍵上 胳膊肘整個過程保持不動 兩手手腕微微向內旋轉,盡量讓手背與琴鍵平行,中空狀。落下時,呈自由落體狀,每個手指放到該放的琴鍵上。一首曲目彈奏完畢,手,輕輕地溫柔...