关注
//第一题并查集思路,供参考
#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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我是面试官,请用一句话让我破防 #
16084次浏览 100人参与
# 美团开奖 #
183385次浏览 969人参与
# “vivo”个offer #
33007次浏览 247人参与
# 校招生月薪1W算什么水平 #
15354次浏览 112人参与
# 中美关税战对我们有哪些影响 #
37793次浏览 306人参与
# i人适合做什么工作 #
7923次浏览 81人参与
# 快手技术岗信息交流阵地 #
15754次浏览 82人参与
# 读研or工作,哪个性价比更高? #
75241次浏览 762人参与
# 华为保温 #
102426次浏览 383人参与
# 哪些瞬间让你真切感受到了工作的乐趣 #
17214次浏览 79人参与
# 小厂实习有必要去吗 #
69916次浏览 344人参与
# 哪些行业值得去? #
2907次浏览 40人参与
# 秋招什么时候开投比较合适? #
109837次浏览 807人参与
# 如果秋招能重来,我会____ #
29650次浏览 255人参与
# 华为池子有多大 #
107479次浏览 748人参与
# 美团求职进展汇总 #
2806064次浏览 23836人参与
# 上班后和你想的一样吗? #
87487次浏览 666人参与
# 苦尽甘来时,再讲来时路 #
26312次浏览 359人参与
# 为了实习逃课值吗? #
23194次浏览 214人参与
# 大家实习每天都在干啥 #
97135次浏览 536人参与
# 工作压力大怎么缓解 #
119689次浏览 1112人参与
# 如果上班像打游戏,你最想解锁什么技能 #
5627次浏览 55人参与

