日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-7 社交集群 (30 分) (集合数组的方法)

發(fā)布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-7 社交集群 (30 分) (集合数组的方法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

當(dāng)你在社交網(wǎng)絡(luò)平臺注冊時,一般總是被要求填寫你的個人興趣愛好,以便找到具有相同興趣愛好的潛在的朋友。一個“社交集群”是指部分興趣愛好相同的人的集合。你需要找出所有的社交集群。

能搜這道題的差不多都一樣,就不把題目照搬了

這道題我的想法是: 每個人都有一個集合,裝著,自己的興趣愛好,如果與其他人的興趣集合(set的一個方法)有交集,就把他們連接起來(并查集),最后統(tǒng)計圈子的個數(shù)和里面人數(shù)的數(shù)量,找了半天也沒看到有和自己想法相同的,就自己發(fā)出來看看(詳細(xì)點的注釋在代碼上)

#include <bits/stdc++.h> using namespace std;set<int> id[1010]; //每個人的興趣集合 int fa[1010]; //并查集 int cnt[1010]; //統(tǒng)計圈子數(shù)量void init(int n) {for (int i = 1 ; i <= n ; i++) fa[i] = i; }int find(int x) {return x == fa[x] ? x : (fa[x] = find(fa[x])); }void merge(int x, int y) {fa[find(x)] = find(y); }int main() {int n;cin >> n;init(n);int k,h;scanf("%d: ", &k);while (k-- ) {cin >> h;id[1].insert(h);}for (int i = 2 ; i <= n ; i++) {int k,h;set<int> st; //下面用來判斷兩個集合有沒有交集scanf("%d: ",&k);while (k--) {cin >> h;id[i].insert(h);}for (int j = 1 ; j < i ; j++) {set_intersection(id[j].begin(),id[j].end(),id[i].begin(),id[i].end(),inserter(st,st.begin()));if (st.size()) merge(j,i);st.clear(); //重置}}//后面有點冗長,不過也沒想其他方法優(yōu)化了for (int i = 1 ; i <= n ; i++) {cnt[find(i)]++; //計數(shù)}sort(cnt+1,cnt+n+1,greater<int>());int num =0; for (int i = 1 ; i <= n ; i++) {if (cnt[i]) num++;}cout << num<<endl;int flag = 0;for (int i = 1 ; i <= n ; i++) {if (cnt[i]) {if (!flag) {cout << cnt[i];flag = 1;} else cout << " " <<cnt[i];}} }

學(xué)習(xí)愉快!!!

總結(jié)

以上是生活随笔為你收集整理的7-7 社交集群 (30 分) (集合数组的方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。