题解 | #朋友圈#

朋友圈

http://www.nowcoder.com/practice/11ee0516a988421abf40b315a2b28d08

  1. 使用全局变量得方法。
  2. 记得递归find方法。
  3. 人头从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;
}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 10:48
点赞 评论 收藏
分享
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务