题解 | 第一题
第一题
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#