题解 | 第一题

第一题

https://www.nowcoder.com/practice/7c29cdfa28274c86afc9e88c07448a10

#include <stdio.h>
#include <vector>
using namespace std;
int father[1000000];
void InitT(){
    for(int i=0;i<1000000;++i){
        father[i]=i;
    }
}
int FindT(int u){
    if(u==father[u]){return u;}
    else{
        father[u]=FindT(father[u]);
        return father[u];
    }
}
void UnionT(int u,int v){
    int uroot=FindT(u);
    int vroot=FindT(v);
    father[vroot]=uroot;
}
int main(){
    InitT();
    vector<int> dis;
    int i,j;
while(scanf("%d%d",&i,&j)!=EOF){
    dis.push_back(i);
    dis.push_back(j);
    UnionT(i,j);
}
int root=0;
int rootcishu[1000000]={0};
for(int i=0;i<dis.size();++i){
    if(rootcishu[dis[i]]==0){
        if(father[dis[i]]==dis[i]){++root;++rootcishu[dis[i]];}
    }
}
printf("%d",root);
return 0;

}

#快用了10MB#
全部评论

相关推荐

04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务