原題鏈結
並查集要想明白 合併的是什麼是通過什麼合併的
合併的是人的編號 通過是否喜歡同乙個活動x進行判斷
1、int course[x]; //喜歡活動x的人的編號
如果這個活動沒人喜歡過就要設定course[x] = i;喜歡過的話就合併
2、findfather(course[x])
喜歡活動x的人所在的社交圈子的根結點,需要與當前編號i進行合併。
#include
#include
#include
#include
using
namespace std;
//const int maxn = 100010;
const
int maxn =
1010
;int isroot[maxn]
;//用於記錄團體個數
int father[maxn]
;int enemy[maxn]
[maxn]
;int course[maxn]
;//喜歡活動x的人的編號
bool
cmp(
int a,
int b)
intfindfather
(int x)
void
union
(int a,
int b)
int cont =0;
intmain()
int n;
cin >> n;
for(
int i =
1; i <= n;
++i)
union
(findfather
(course[x]
),i);}
}for
(int i =
1; i <= n; i++
)sort
(isroot+
1,isroot+
1+n,cmp)
;for
(int i =
1; i <= n; i++
) cout << cont << endl;
for(
int i =
1; i <= cont; i++
)return0;
}
L3 003 社交集群 (30 分)
當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,...
L3 003 社交集群 30分
當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入格式 輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後...
L3 003 社交集群 30 分
include using namespace std int vis 1010 vector int table 1010 每個人對應的興趣 vector int val person 1010 每個興趣對應的人 bool cmp int a,int b void gethorde int peo...