BOI2003 團夥(並查集)

2022-05-10 07:23:46 字數 797 閱讀 2404

2023年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是:

我朋友的朋友是我的朋友;

我敵人的敵人也是我的朋友。

兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資訊,問你最多有多少個強盜團夥。

輸入檔案gangs.in的第一行是乙個整數n(2<=n<=1000),表示強盜的個數(從1編號到n)。 第二行m(1<=m<=5000),表示關於強盜的資訊條數。 以下m行,每行可能是f p q或是e p q(1<=p q<=n),f表示p和q是朋友,e表示p和q是敵人。輸入資料保證不會產生資訊的矛盾。

輸出檔案gangs.out只有一行,表示最大可能的團夥數。

輸入 #1

6

4e 1 4

f 3 5

f 4 6

e 1 2

輸出 #1

3

在題解學習了反集qwq

#include#include

using

namespace

std;

int n,m,s,x,y,fa[2500

];char

t;int find(int

x)int

main()

}for(int i = 1; i <= n; i++)if(fa[i] == i) s++;

printf("%d

",s);

return0;

}

題解 BOI2003 團夥

其實綠色有點看高了此題。此題只需要加乙個 敵人的敵人就是我的朋友 就可以了,而只要乙個人x與另一人y是敵人,x就和y的第乙個敵人是朋友就可以將x弄進y的敵人團夥,而y的敵人將全在那個團夥中 下面是 includeusing namespace std int bcj 5010 int e 5010 ...

並查集 1385 團夥 group

題目描述 在某城市裡住著n個人,任何兩個認識的人不是朋友就是敵人,而且滿足 1 我朋友的朋友是我的朋友 2 我敵人的敵人是我的朋友 所有是朋友的人組成乙個團夥。告訴你關於這n個人的m條資訊,即某兩個人是朋友,或者某兩個人是敵人,請你編寫乙個程式,計算出這個城市最多可能有多少個團夥?輸入 第1行為n和...

題解 P1892 BOI2003 團夥 C

原題傳送門 前置知識 並查集,不會的補了再來。這道題只是在並查集的基礎上多了乙個操作而已。這種操作,叫做反集 就先這麼叫著 題目裡有一種關係是互為朋友,這很好理解,把互為朋友的兩個點合併就可以了。互為敵人怎麼辦?用反集!所謂反集,就是分別把x,y和它們對應的虛點連線起來。虛點 a的虛點是a n 點數...