关注
//第一题并查集思路,供参考
#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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的OC时间线 #
438223次浏览 3903人参与
# 你的头发还好吗?一起爆改美发黑科技! #
74782次浏览 1106人参与
# Keep实习校招 #
31544次浏览 227人参与
# 牛友故事会 #
589437次浏览 12478人参与
# 职场捅娄子大赛 #
263895次浏览 2379人参与
# 总结:哪家公司面试体验感最差 #
40537次浏览 209人参与
# 平安产险科技中心求职汇总 #
243502次浏览 2606人参与
# 工作中的卑微时刻 #
7668次浏览 49人参与
# 工作压力大怎么缓解 #
68146次浏览 896人参与
# 和牛牛一起刷题打卡 #
266997次浏览 6444人参与
# 找工作时的取与舍 #
51952次浏览 352人参与
# Offer比较,你最看重什么? #
150261次浏览 1033人参与
# 欣旺达工作体验 #
12017次浏览 37人参与
# 视觉/交互/设计招聘信息汇总 #
8497次浏览 571人参与
# 百度秋招提前批进度 #
100391次浏览 1114人参与
# 2025,我想...... #
36306次浏览 352人参与
# 机械人,你被简历秒挂的企业有哪些? #
35341次浏览 257人参与
# 你知道哪些职场黑话? #
29403次浏览 240人参与
# 你怀疑过自己的专业选择吗? #
16108次浏览 194人参与
# 地方国企笔面经互助 #
21629次浏览 40人参与
# 提前批过来人的忠告 #
97170次浏览 1086人参与
# 市场营销人求职交流聚集地 #
104280次浏览 993人参与