C++数据结构——热闹的聚会
生活随笔
收集整理的這篇文章主要介紹了
C++数据结构——热闹的聚会
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
熱鬧的聚會
今天是小明的生日,他邀請了許多朋友參加聚會,當然,有些朋友之間由于互不認識,因此不愿意坐在同一張桌上,但是如果A認識B,且B認識C,那么A和C就算是認識的。
為了使得聚會更加熱鬧,就應該盡可能少用桌子。那么,最熱鬧(人數最多的)的那一桌一共有多少人嗎?
輸入格式:
首先輸入一個整數T,表示測試數據的組數,然后是T組測試數據。每組測試數據首先輸入2個整數n和m (1≤n , m≤1000)。其中n表示朋友總數,并且編號從1到n;然后輸入m行數據,每行2個整數A和 B (A≠B), 表示朋友A和B相互認識。
輸出格式:
對于每組測試,輸出最熱鬧的那一桌的總人數。
輸入樣例:
3
5 3
1 2
2 3
4 5
5 1
2 5
10 9
7 8
1 5
1 7
1 2
1 3
1 4
2 6
2 9
9 2
輸出樣例:
3
2
9
代碼長度限制 16 KB 時間限制 400 ms 內存限制 64 MB
解題代碼
#include<bits/stdc++.h> using namespace std; int men[1005]; int ans[1005]; int find(int x) {if(men[x]==x){return men[x];} men[x]=find(men[x]);return men[x]; }void Union(int a,int b) //合并 {a = find(a);b = find(b);if(a!=b){men[b]=a;ans[a]+=ans[b];} }int main() {int T,n,m,a,b;cin>>T;while(T--){cin>>n>>m;;for(int i=1;i<=n;i++){men[i]=i;ans[i]=1;}for(int i=0;i<m;i++){cin>>a>>b;Union(a,b);}int maxNum = 0;for(int i=1;i<=n;i++){if(ans[i]>maxNum&&men[i]==i)maxNum=ans[i];}cout<<maxNum<<endl;} }解題思路
并查集,這里要每次合并的時候,要把一邊的數量存儲到新合并上的一邊,一開始用指針提交pta爆段錯誤,離譜
總結
以上是生活随笔為你收集整理的C++数据结构——热闹的聚会的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UG/NX 装配克隆
- 下一篇: 《大数据之路-阿里巴巴大数据实践》读书笔