hdu1856 选出更多的孩子

题目大意:

老师选取2个学生对应的号码,这两人视作朋友,同时朋友的朋友也可以看成自己的朋友。

最后老师选出一个人数最多的朋友圈。

这里学生的人数不大于10^7,所以操作时需要极为注意,操作步数能省则省。

我也在超时了两次之后,不断进行代码优化才做出。

超时的部分函数代码:

1 int getHead(int x)
2 {
3     while(x!=fa[x]) x=fa[x];
4     return x;
5 }

后来在这个代码基础上加了int a=x;return前加一个fa[a]=x;这样在查找顶点时,同时将路径进行压缩,下次再去查找时就不会有重复的操作。

之前的联合函数
void Union(int x,int y)
{

    int
fa_x=getHead(x);
    int
fa_y=getHead(y);
    if
(fa_x!=fa_y) {fa[fa_x]=fa_y;K[fa_y]+=K[fa_x];}
}

这是将每个作为顶点位置上对应的小组人数保存在K数组中,但是这样在main函数中要对K数组进行一次遍历(10^7次的操作,又浪费时间了)
所以后来引进了Max的全局变量,每次结合时就更新Max,那么main函数中直接输出Max即可.

改过之后函数变为:

void Union(int x,int y)
{

    int
fa_x=getHead(x);
    int
fa_y=getHead(y);
    if
(fa_x!=fa_y) {fa[fa_x]=fa_y,fa[x]=fa_y;K[fa_y]+=K[fa_x];}
    Max=max(Max,K[fa_y]);
}

总体代码如下:

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 #define MAXN 10000100
 6 int Max;
 7 int fa[MAXN],K[MAXN];
 8
 9 int max(int x,int y)
10 {
11     return x>y?x:y;
12 }
13 int getHead(int x)
14 {
15     int a=x;
16     while(x!=fa[x]) x=fa[x];
17     fa[a]=x;
18     return x;
19 }
20 void Union(int x,int y)
21 {
22     int fa_x=getHead(x);
23     int fa_y=getHead(y);
24     if(fa_x!=fa_y) {fa[fa_x]=fa_y,fa[x]=fa_y;K[fa_y]+=K[fa_x];}
25     Max=max(Max,K[fa_y]);
26 }
27 int main()
28 {
29     int n,t;
30     while(scanf("%d",&n)!=EOF){
31         t=0;
32         int *a=new int[n];
33         int *b=new int[n];
34         for(int i=1;i<=MAXN;i++){
35             K[i]=1;
36             fa[i]=i;
37         }
38         Max=1;
39         for(int i=0;i<n;i++){
40             scanf("%d%d",&a[i],&b[i]);
41             Union(a[i],b[i]);
42         }
43
44         printf("%d\n",Max);
45     }
46     return 0;
47 }

hdu1856 选出更多的孩子

时间: 2024-10-10 14:24:50

hdu1856 选出更多的孩子的相关文章

国艺练字是专为你培养孩子兴趣的好老师!

对于大部分初学者而言,练字都是从偏旁部首.笔画顺序开始的,所以会感觉硬笔书法练字是一件比较枯燥的事情.如果一件事情无法让你有兴趣,就很难坚持.很多初学者都会反映说练字的一大难点就是坚持.爱因斯坦说过:"兴趣是最好的老师."所以想要坚持练字,最好的办法就是培养练字的兴趣. 很多初学者都觉得疑惑练字就是一笔一画的书写,就是重复不断的练习,时间久了会觉得无聊是一件很正常的事情.如何持续保持对练字的兴趣呢?其实,*少儿书法培训练字兴趣的培养,最重要的是你书写的是什么和你书写的成果. 你书写的是

升学e网通有用吗?能够帮助孩子提升成绩吗?

现在新高考改革,很多家长都得提前为孩子着想,但是家长们大多不太懂新的政策,这时候应该怎么办?据说现在很多学生都在用升学e网通,说升学e网通比较好,升学e网通有用吗?真的能帮孩子进行规划?提升成绩吗? 最近新高考实行,好多原来的学习软件和平台就显得有点落后了,现在最重要的是孩子的"3+3"选科目,这是高考的起步点,也决定着将来报考院校的范围,家长们大多不懂这些,也没有具体的资料来了解相关政策,有些家长为此忧心不已. 而升学e网通是一个在行业内比较有名的学习平台,可以说是高考专家.随着现在

js基础第四天

多个tab栏切换class封装 <style>         *{margin:0;padding:0;}         ul{list-style:none;}         .box {             width: 350px;             height: 300px;             border:1px solid #ccc;             margin: 100px auto;             overflow: hidden; 

&ldquo;互联网+&rdquo;背景下使用微信公众号增强班主任工作与整合教学资源(泰微课)

前记:此文是我爱人一项作业.因为我本人对于微信这一块比较熟悉,就参与这项作业中.此文已经参加移动和教育相关活动.作者是我爱人,如有转载请署名作者. 一.什么是"互联网+"? 早在1969年互联网诞生之初,人们的初衷仅仅是对计算机之间的互相通信.就像电话.传真那样简单.而四十多年间互联网的发展用"日新月异"都嫌慢.互联网也从原先的固定线路的延展到基于移动通信的移动网络,互联的设备也从刚开始的以计算机为主发展到"connect to anything"

母婴电商:不只卖给妈妈,何不换个思路卖给爸爸?

为人父母之后与没做爸妈之前的心态是截然不同的,这是靠想象无法体会的感受,只有当了爸妈才会真正长大,这是许多过来人的经验之谈.一旦有了孩子,就会把大部分精力都放在孩子身上,孩子的吃穿,孩子的安全,孩子的教育,无时无刻不牵动着爸妈的心,所以现代商人都认为孩子的钱最好赚. 母婴电商:从B2C到O2O到特卖再到跨境,市场竞争愈发激烈 从2000年乐友孕婴童网站上线以来,母婴电商已经走过了近16年的时间,这期间母婴电商的发展起起伏伏.从早期红孩子的邮购目录到成立B2C网站,到淘宝.京东.当当等设立母婴频道

《Java并发编程实战》第十一章 性能与可伸缩性 读书笔记

造成开销的操作包括: 1. 线程之间的协调(例如:锁.触发信号以及内存同步等) 2. 增加的上下文切换 3. 线程的创建和销毁 4. 线程的调度 一.对性能的思考 1 性能与可伸缩性 运行速度涉及以下两个指标: 某个指定的任务单元需要"多快"才能处理完成.计算资源一定的情况下,能完成"多少"工作. 可伸缩性: 当增加计算资源时(例如:CPU.内存.存储容器或I/O带宽),程序的吞吐量或者处理能力能相应地增加. 2 评估各种性能权衡因素 避免不成熟的优化.首先使程序正

java实现算法之堆排序

本文参考文章:http://blog.csdn.net/morewindows/article/details/6709644 堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先讲解下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树. 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值. 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆). 当父结点的键值总是大于或

前端小问题3

20%的功能满足80%的需求.爱.喜悦.和平. 1.js计算时间 手动获取某个时间点 <html> <body> <script type="text/javascript"> var d = new Date(); d.setFullYear(2015,11,29); d.setHours(14); d.setMinutes(0); d.setSeconds(0); d.setMilliseconds(0); document.write(d) &

多线程-并发三大定律

并发三大定律 Amdahl 定律 –Gene Amdahl 发现在计算机体系架构设计过程中,某个部件的优化对整个架构的优化和改善是有上限的.这个发现后来成为知名的Amdahl 定律. 比如:即使你有10个老婆,也不能一个月把孩子生下来. Gustafson 定律 –Gustafson假设随着处理器个数的增加,并行与串行的计算总量也是可以增加的.Gustafson定律认为加速系数几乎跟处理器个数成正比,如果现实情况符合Gustafson定律的假设前提的话,那么软件的性能将可以随着处理个数的增加而增