关注
//第一题并查集思路,供参考
#include <stdio.h>
#define N 100020
int friends[N];//每个人所属的连通分量,即构成朋友树时每个人的父节点
int rank[N];//连通分量的权值,即朋友树的大小
int res;
void init(int n)//初始化initialization
{
for(int i=0;i<n;i++)
{
friends[i]=i;
rank[i]=0;
}
}
int findRoot(int x)//寻找x所属的朋友树的根节点
{
//一直向上遍历寻找根节点
while(x != friends[x])
x = friends[x];
return x;
}
void connect(int x,int y)
{
int xRoot = findRoot(x);
int yRoot = findRoot(y);
if(xRoot == yRoot)
return ;
//判断树高,小树并在大树下
if(rank[xRoot] < rank[yRoot])
friends[xRoot]=yRoot;
else
{
friends[yRoot] = xRoot;
if(rank[xRoot]==rank[yRoot])//两树高相等,合并后树高+1
rank[xRoot]++;
}
--res;
}
int main()
{
int n;
init(N);//初始化
scanf("%d",&n);
res = n;
for(int i=1;i<=n;i++){
int t;
while(~scanf("%d",&t)){
if(t == 0)
break;
connect(i,t);
}
}
printf("%d",res);
return 0;
}
查看原帖
点赞 评论
相关推荐
03-24 21:28
长沙理工大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 毕业季,给职场新人一些建议 #
25293次浏览 438人参与
# 你的房租占工资的比例是多少? #
22767次浏览 255人参与
# 我的求职总结 #
28489次浏览 477人参与
# 计算机专业还有必要去大厂卷吗 #
20458次浏览 107人参与
# 我的实习日记 #
2442010次浏览 25436人参与
# 薪资一样,你会选择去大厂还是小公司 #
16695次浏览 102人参与
# 辞职之后最想做的一件事 #
11186次浏览 162人参与
# 选offer应该考虑哪些因素 #
19869次浏览 294人参与
# 晒一晒你收到的礼盒 #
62565次浏览 374人参与
# 你怀疑过自己的专业选择吗? #
17577次浏览 201人参与
# 为了秋招你都做了哪些准备? #
11067次浏览 166人参与
# Offer比较,求稳定还是求发展 #
49534次浏览 239人参与
# 你想吐槽公司的哪些规定 #
17685次浏览 68人参与
# 第一份工作应该只看薪资吗 #
138947次浏览 1460人参与
# 非技术岗薪资爆料 #
355757次浏览 2746人参与
# 我的工作日记 #
98323次浏览 1271人参与
# 你见过最离谱的招聘要求是什么? #
188501次浏览 1403人参与
# 你想留在一线还是回老家? #
38279次浏览 449人参与
# 秋招想进国企该如何准备 #
58351次浏览 376人参与
# 工作中的卑微时刻 #
9115次浏览 55人参与