hdu 1856 关于并查集的(简单) 我老是WA

money939 money939 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
http://acm.hdu.edu.cn/showproblem.php?pid=1856
地址啊!~~~~~~~~~~

Problem Description
Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the better it will be. Of course there are certain requirements.

Mr Wang selected a room big enough to hold the boys. The boy who are not been chosen has to leave the room immediately. There are 10000000 boys in the room numbered from 1 to 10000000 at the very beginning. After Mr Wang's selection any two of them who are still in this room should be friends (direct or indirect), or there is only one boy left. Given all the direct friend-pairs, you should decide the best way.



Input
The first line of the input contains an integer n (0 ≤ n ≤ 100 000) - the number of direct friend-pairs. The following n lines each contains a pair of numbers A and B separated by a single space that suggests A and B are direct friends. (A ≠ B, 1 ≤ A, B ≤ 10000000)


Output
The output in one line contains exactly one integer equals to the maximum number of boys Mr Wang may keep.



Sample Input
4
1 2
3 4
5 6
1 6
4
1 2
3 4
5 6
7 8


Sample Output
4
2

Hint
A and B are friends(direct or indirect), B and C are friends(direct or indirect),
then A and C are also friends(indirect).

In the first sample {1,2,5,6} is the result.
In the second sample {1,2},{3,4},{5,6},{7,8} are four kinds of answers.


#include <stdio.h>

#define MM 10000009

int a[MM];

int b[MM];



int find(int x)

{

if(a[x]==x)

return x;

else

return a[x]=find(a[x]);////////递归调用找到根节点

}



int umax;



void hb(int x,int y)

{



x=find(x);

y=find(y);



if(b[x]<b[y])

{

a[x]=y;

b[y]+=b[x];

if(b[y]>umax)

umax=b[y];///////////////用来当前记录最大值

}

else

{

a[y]=x;

b[x]+=b[y];

if(b[x]>umax)

umax=b[x];

}

}





int main()

{

int i,j,k,m,n;

while(scanf("%d",&k)!=EOF)

{

if(k==0)

{

printf("1\n");

continue;

}



for(i=1;i<MM;i++)

{

a[i]=i;



b[i]=1;

}



umax=1;



for(i=0;i<k;i++)

{

scanf("%d%d",&m,&n);

if(m!=n)

hb(m,n);

}





printf("%d\n",umax);



}

return 0;

}



房间里面有10000000个人,每个人的编号从1到10000000,

一开始输入数据4,代表接下来有四个关系,
1 2就是1和2是朋友 3 4是朋友 5 6是朋友 1 6是朋友 朋友的朋友也是朋友

所以1 2 5 6是朋友 那么在这个房间里朋友数最多的团体的人数是4人。就输出结果



我先谢谢大家了,我已经问了学校里好几个大牛了都说看不出来啊!
...全文

相关推荐

ACM知识点.docx

并查集的应用非常广泛,例如在社交网络中判断用户是否相互关注,在网络拓扑结构中判断节点是否连通等。在该文件中,1Hdu 1856 并查集是一个典型的并查集问题,要求使用并查集来解决连通性问题。

G11176593

acm常用算法总结

在HDU 1856这道题目中,可以通过构建并查集,利用rank数组来统计最大群体的大小,避免暴力遍历导致的超时。**二分图识别**:二分图识别涉及到判断图中是否存在同性间的连接。

Jophoenix

lost所有算法总结

在HDU 1856 More is better的问题中,需要找到最大群体人数,通过并查集构造rank数组并在合并操作中解决计数问题,避免了简单的暴力统计导致的时间超限错误。

hewengao401

超扭滑模与快速终端滑模的永磁同步电机无感控制:理论、离散化实现与仿真研究(Simulink仿真实现)

内容概要:本文聚焦于超扭滑模控制(STSMC)与快速终端滑模控制(FTSMC)在永磁同步电机(PMSM)无位置传感器控制中的应用,系统地开展了理论分析、离散化实现与Simulink仿真实验研究。重点探讨了这两种高阶滑模控制策略在零低速工况下的控制性能,通过设计基于磁链观测器的无感估计算法,实现了对电机转子位置与速度的精确估计,有效规避了传统机械传感器带来的成本增加与可靠性下降问题。文中详尽阐述了控制算法的数学建模与推导过程,并针对数字控制系统的特点进行了严谨的离散化处理,最终在Simulink环境中搭建了完整的电机控制仿真模型,通过对比实验全面评估了不同控制策略在动态响应速度、抗外部干扰能力和稳态控制精度等方面的综合性能。; 适合人群:具备自动控制理论、电机驱动原理等专业知识,并熟悉MATLAB/Simulink仿真环境操作的电气工程、自动化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入研究超扭滑模与快速终端滑模等高阶滑模控制理论在高性能电机驱动系统中的具体应用与实现方法;②掌握永磁同步电机在零低速段无位置传感器控制的核心算法,特别是基于磁链观测的转子状态估算技术;③学习如何将连续域的先进控制理论转化为适用于实际数字控制器的离散化算法,并完成从理论到仿真的完整闭环验证。; 阅读建议:此文理论深度与实践操作紧密结合,读者应重点关注控制算法的设计思想、离散化实现的关键步骤以及Simulink仿真模型的构建细节,建议在阅读过程中动手复现仿真模型,通过调整控制器参数来深入理解各模块的功能作用及系统整体的动静态性能表现。

荔枝科研社

政府如何精准掌握园区企业创新能力,以制定更有效的科技政策?.docx

政府如何精准掌握园区企业创新能力,以制定更有效的科技政策?

BIZKEEN
评论 2
收藏 已收藏
分享
返回顶部
money939
非技术区 15,445 成员 58,111 内容