洛谷 P1892 BOI2003 團夥

2022-05-13 07:47:46 字數 1044 閱讀 7617

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只有一行,表示最大可能的團夥數。

樣例

輸入

64e 

14f 3

5f 46

e 12

輸出

3

解析

基礎並查集,如果是敵人那每次合併的時候就分別遍歷一下對方的敵人後合併,如果是朋友的話就直接合併。

**

#includeusing

namespace

std;

int p[1005

];int fight[1005][1005

];int

n,m;

void

clean()

}int getf(intv)}

int mer(int a,intb)}

intmain()

else

if(fight[a][j]==1

)

}//a,b是敵人的話要分別找a的敵人和b的敵人

} }

int ans=0

;

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

cout

return0;

}

題解 P1892 BOI2003 團夥 C

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

洛谷P1892 團夥

此題本人在洛谷上也著有題解,想看的朋友也可以去看 鏈結 假設敵人的敵人是朋友,朋友的朋友也是朋友。規定為朋友的兩個強盜為同一團夥,現給定n個強盜的m對關係 2 n 1000,1 m 5000 求共有幾個團夥?利用並查集,只需要普通的查詢合併操作就行了,沒有什麼難點。最後在掃瞄所有人,如果祖先是自己,...

洛谷 P1892 團夥

洛谷 p1892 團夥 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資訊,問你最多有多少個強盜團夥。輸入格式 ...