关注
//第一题并查集思路,供参考
#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;
}
查看原帖
点赞 评论
相关推荐
码农索隆:好!开心,给你看看我小区的小猫!
查看图片


点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你认为小厂实习有用吗? #
13257次浏览 185人参与
# 面试官是我前女友 #
106823次浏览 730人参与
# 实习生的蛐蛐区 #
38851次浏览 324人参与
# 当你面对裁员会如何? #
275855次浏览 2438人参与
# 计算机有哪些岗位值得去? #
12542次浏览 131人参与
# lastday知无不言 #
56790次浏览 459人参与
# 在职场上,你最讨厌什么样的同事 #
14383次浏览 150人参与
# 推荐一首陪你工作的歌吧 #
13981次浏览 97人参与
# 说说你知道的学历厂 #
27440次浏览 174人参与
# 你找工作的时候用AI吗? #
14512次浏览 192人参与
# 下班后的时间你怎么安排 #
7156次浏览 111人参与
# 哪一瞬间觉得自己长大了 #
7123次浏览 160人参与
# 携程求职进展汇总 #
559343次浏览 4258人参与
# 面试尴尬现场 #
22938次浏览 160人参与
# 工作后会跟朋友渐行渐远吗 #
29990次浏览 216人参与
# 中核求职进展汇总 #
20092次浏览 152人参与
# 社会教会你的第一课 #
28566次浏览 388人参与
# 多益网络工作体验 #
49561次浏览 280人参与
# 虾皮求职进展汇总 #
244132次浏览 1797人参与
# 神州信息工作体验 #
15945次浏览 74人参与