博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1856
阅读量:5041 次
发布时间:2019-06-12

本文共 1245 字,大约阅读时间需要 4 分钟。

并查集基本应用、

题意:有编号为1到10^7的男生在一个房间,现在给出n组数据,每组数据包括两个编号,且这两个编号的人是朋友,如果A和B是朋友,B和C是朋友,那么A,B,C三人都是朋友,哪一个朋友圈中人数最多,输出这个朋友圈的人数

思路:因为编号是1到10^7所以,每次都要求出最大的编号数,如果每次都循环到10^7的话是会超时的,最后利用路径压缩,记录和的话是用的寻找根节点然后++

(提醒一下:如果数据很多的话用scanf输入比较好,cin的话会很慢)

1 #include
2 #include
3 const int qq=1e7+1; 4 int par[qq],sum[qq]; 5 int n; 6 void handle() 7 { 8 for(int i=1;i<=1e7;++i){ 9 par[i]=i;10 sum[i]=0;11 }12 }13 int find(int x)14 {15 while(x!=par[x])16 x=par[x];17 return x; 18 }19 void unio(int x,int y)20 {21 int fx=find(x);22 int fy=find(y);23 par[fy]=fx;24 int t;25 while(x!=fx){26 t=par[x];27 par[x]=fx;28 x=t;29 }30 }31 int main()32 {33 while(scanf("%d",&n)!=EOF)34 {35 handle();36 int x,y;37 int Max=0;38 for(int i=1;i<=n;++i){39 scanf("%d%d",&x,&y);40 if(x>Max) Max=x;41 if(y>Max) Max=y;42 if(find(x)!=find(y))43 unio(x,y);44 }45 int mmax=1;46 for(int i=1;i<=Max;++i)47 sum[find(i)]++;48 for(int i=1;i<=Max;++i)49 if(mmax

 

转载于:https://www.cnblogs.com/sasuke-/p/5164560.html

你可能感兴趣的文章
时间>金钱
查看>>
元数据元素
查看>>
Visual Studio Code 构建C/C++开发环境
查看>>
web自己主动保存表单
查看>>
一个小的日常实践——高速Fibonacci数算法
查看>>
创建与删除索引
查看>>
java的基本数据类型
查看>>
机器学些技法(9)--Decision Tree
查看>>
静态页面复习--用semantic UI写一个10min首页
查看>>
在Windows下安装64位压缩包版mysql 5.7.11版本的方法
查看>>
drf权限组件
查看>>
输入月份和日期,得出是今年第几天
查看>>
利用mysqldump备份mysql
查看>>
Qt中子窗口全屏显示与退出全屏
查看>>
使用brew安装软件
查看>>
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
吴裕雄 python 机器学习——数据预处理嵌入式特征选择
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>