當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個「社交集群」是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。
輸入在第一行給出乙個正整數 n(≤1000),為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後 n 行,每行按以下格式給出乙個人的興趣愛好列表:
ki: hi[1] hi[2] ... hi[ki]
其中ki(>0)是興趣愛好的個數,hi[j]是第j個興趣愛好的編號,為區間 [1, 1000] 內的整數。
首先在一行中輸出不同的社交集群的個數。隨後第二行按非增序輸出每個集群中的人數。數字間以乙個空格分隔,行末不得有多餘空格。
8
3: 2 7 10
1: 4
2: 5 3
1: 4
1: 3
1: 4
4: 6 8 1 5
1: 4
3
4 3 1
思路:並查集。當輸入乙個興趣時,要找到有該興趣的人的id,用course【t】儲存擁有t興趣的人的id;
程式:
#include #include using namespace std;
#define n 1005
int father[n];
int course[n];
int root[n];
bool cmp(int a,int b)
void init(int n)
int find(int x)
void union(int a,int b)
int main()
} int count = 0;
for(int i = 1; i <= n; i++)
printf("%d\n",count);
sort(root + 1,root + n, cmp);
int cnt = 0;
for(int i = 1; root[i] != 0; i++)
else
printf(" %d",root[i]);
} printf("\n");
return 0;
}
L3 003 社交集群 30分
當你在社交網路平台註冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。乙個 社交集群 是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。輸入格式 輸入在第一行給出乙個正整數 n 1000 為社交網路平台註冊的所有使用者的人數。於是這些人從 1 到 n 編號。隨後...
L3 003 社交集群 30分
原題鏈結 並查集要想明白 合併的是什麼是通過什麼合併的 合併的是人的編號 通過是否喜歡同乙個活動x進行判斷 1 int course x 喜歡活動x的人的編號如果這個活動沒人喜歡過就要設定course x i 喜歡過的話就合併 2 findfather course x 喜歡活動x的人所在的社交圈子...
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...