時間限制: 1 sec 記憶體限制: 128 mb
題目描述
校園內有很多白社會團夥,他們專做好事。經過長期的臥底,學校有n個人,任何兩個認識的人不是朋友就是敵人,而且滿足:①我朋友的朋友是我的朋友;②我敵人的敵人是我的朋友。所有是朋友的人組成乙個團夥。現在擁有關於這n個人的m條資訊(即某兩個人是朋友,或某兩個人是敵人),請你計算出這個城市最多可能有多少個白社會團夥。
資料範圍:2≤n≤2000,1≤m≤5000。
輸入資料
第一行包含乙個整數n,第二行包含乙個整數m,接下來m行描述m條資訊,內容為以下兩者之一:「f x y」表示x與y是朋友;「e x y」表示x與y是敵人(1≤x≤y≤n)。
輸出資料
包含乙個整數,即可能的最大團夥數。
樣例輸入64
e 1 4
f 3 5
f 4 6
e 1 2
樣例輸出
3//這題沒全過
//過了83%回頭再修改看看**有問題。
運用了乙個反集和並查集的思想
1-n為朋友 n+1-2n為敵人集合
前面的自然用並查集即可
後面因為敵人的敵人是朋友
f[find(x+n)]=find(y);//x與y是敵人
f[find(y+n)]=find(x); //y的敵人與x是朋友
最後掃一遍誰的father還是自己那麼就為乙個團夥。
(p.s第一遍打成if(f[x!=x])結果過了83%,改回來結果56%…mi
#include
#include
using
namespace std;
int n,m;
int flag;
int flag1[
11000];
int f[
2500];
intfind
(int x)
return f[x];}
intmain()
for(
int i=
1;i<=m;i++)}
int s=0;
for(
int i=
1;i<=n;i++)if
(f[i]
==i) s++
;printf
("%d"
,s);
return0;
}
1487 島嶼3 並查集)
description h國正在進行一項持續n周的填海造島工程。整片工程海域可以被看作是1000x1000的網格。每週都有一塊1x1的單位方格海域被填成陸地。如果我們將連成一片的陸地 一塊單位方格與它上下左右4個單位方格是相連的 視為島嶼,h國想監測每週末整片海域中一共存在有多少個島嶼,以及這些島嶼...
小公尺2023年校園招聘筆試題 簡單並查集
九度 題目描述 假如已知有n個人和m對好友關係 存於數字r 如果兩個人是直接或間接的好友 好友的好友的好友.則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另...
2020 牛客多校3 G(並查集)
就是將乙個集合所有與其直接相連的集合合併,被合併的集合消失。比如1並到0中,那麼0,1所屬的集合都為0。題目中直接開佇列開不下,改成vector合併集合會t,看大佬的 發現用鏈式前向星做邊,再加個tail陣列用來o 1 合併就行 也可以用list的splice 合併,都是o 1 的 向當於將另一集合...