题解 | #朋友圈#
朋友圈
http://www.nowcoder.com/practice/11ee0516a988421abf40b315a2b28d08
- 使用全局变量得方法。
- 记得递归find方法。
- 人头从1重新开始编号,所以需要map。
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5 + 5;
int par[MAX_N], cnt[MAX_N];
unordered_map<int,int> umap;
void init(int n){
for(int i = 0; i < n;i++){
par[i] = i;//各自
cnt[i] = 1;//计数,
}
}
int find(int x){
if(par[x] == x)
return x;
else
return par[x] = find(par[x]);
}
void Union(int x, int y){
if(find(x)==find(y))
return;// 统一交给y去处理
cnt[par[y]] += cnt[par[x]];
par[par[x]] = par[y];
}
int main(){
int T,n;
cin >> T;
while(T--){
int n;
cin>>n;
init(2*n+5);
umap.clear();
int cntv = 0;
int x,y;
for(int i = 0; i<n;i++){
cin>>x>>y;
if(umap.find(x)==umap.end()){
++cntv;//通过这种方法,人头就可以从1开始算了
umap[x] = cntv;//在记录人头得ID.
}
if(umap.find(y)==umap.end()){
++cntv;
umap[y] = cntv;//在记录人头得ID.
}
Union(umap[x],umap[y]);
}
int result = 0;
for(int i = 0; i<= cntv;i++){//一定要从0开始,到当前人头,其实0不影响
result = max(result,cnt[find(i)]);// 找到那个集合得。
}
cout<<result<<endl;
}
return 0;
}大厂笔试题题解 文章被收录于专栏
主要是公司笔试题得一些总结

海康威视公司福利 1137人发布