蒜頭最近在沉迷**,尤其是人物關係複雜的言情**。它看到的人物關係描述得很的麻煩的時候覺得非常蒜疼,尤其是人物關係裡有冗餘的時候。什麼是冗餘關係呢?
這篇**裡有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行,每行兩個數,表示一組人物關係。
乙個整數,表示冗餘關係的數目。
3 31 2
1 3
2 3
#include
int fa[2000];
// 還記得之前閱讀課裡講的並查集演算法
// father函式返回的是節點x的祖先節點
int father(int x)
return fa[x];
}// 合併兩個節點所在集合,同時判斷兩個點之前是否在乙個集合裡
// 函式返回true則之前兩個點不在乙個集合中
bool join(int x, int y)
else
}// 初始化乙個n個點的並查集
void init(int n)
int main ()
}printf ("%d\n",count);
return
0;}
計蒜客 程式設計競賽入門
蒜頭的數學實在是太差了,於是老師把他關到小黑屋讓他閉門修煉。老師跟他一張紙,上面一排寫著1,2,3 n這n個數,中間用空白分隔。老師讓他在空白處填上加號或者減號。他讓蒜頭君求出一共有多少種加運算子的方法使得整個表示式的值為0,並輸出所有的方案。比如n 7時,1 2 3 4 5 6 7排成一排,一種插...
計蒜客 程式設計競賽入門
蒜頭君前幾天把最心愛的小麥手機摔壞了,新手機又要好幾天才能到貨,於是蒜頭君不得暫時用它珍藏已久的諾雞鴨非智慧型手機了。手機的儲存空間非常小,以至於未接來電 已接來電和已撥 都只能各自儲存最近的10條記錄。蒜頭買了手機以後的未接來電 已接來電和已撥 記錄全部給出。機智的蒜頭能夠猜到這個手機使用了迴圈佇...
計蒜客課程競賽入門 堆排序 流程記
堆實際上是一顆二叉樹,對於大根堆來說,它的特點就是父節點的值大於所有子節點的值。c 的stl中priority queue已經幫我們實現好了堆的資料結構,接下來我們一起學習並實踐如何實現乙個堆並用堆進行排序。priority queue是stl的queue這個標頭檔案中定義的資料結構,因此需要額外引...