一、問題描述(題目鏈結)
有n種化合物,每種化合物由兩種元素組成。當幾種的化合物數量等於他們所含不同元素的數量時,就會發生**。現在依次給出化合物的組成,當新的化合物與之前的化合物放在一起會發生**時,就不能允許這個化合物放進來。輸出拒絕的次數。
二、問題分析
把元素看成點,化合物看成邊,每次新的化合物進來當成連一條邊。
如果圖中沒有環,則每個連通分量是一棵樹,其邊數等於點數減1,不可能存在**的情況;如果圖中有環,則這個環上點數等於邊數,就會**。
使用並查集連邊,如果要連的兩個點在同一集合中,則答案加1。
三、**實現
1 #include2 #include3 #include4 #include5using
namespace
std;
67 typedef long
long
ll;8
const
int maxn = 100000 + 10;9
intpar[maxn];
10int
n, ans;
1112
void
init()
1317
18int find_set(int
x)19
2425
void unite(int x, int
y)26
3536 par[rootx] =rooty;37}
3839
intmain()
4052 printf("
%d\n
", ans);53}
54return0;
55 }
並查集 並查集
本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...
A 食物鏈(並查集 思維)
我覺著這道題是很經典的並查集 思維題 題意很好理解,主要是如何去理解並查集 運用並查集解決這道題 首先先把並查集搞明白 並查集 用於歸類的資料結構 我相信剛接觸的肯定懵逼,嘻嘻 首先我用 釋 那麼這就是它歸類的大概思路 那麼如何實現呢?其實如果你對bfs記錄路徑很熟悉的話 只不過bfs記錄路徑需要s...
並查集入門(普通並查集 帶刪除並查集 關係並查集)
什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...