题目大意:

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

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

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

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

超时的部分函数代码:

 int getHead(int x)
{
while(x!=fa[x]) x=fa[x];
return x;
}

后来在这个代码基础上加了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]);
}

总体代码如下:

 #include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 10000100
int Max;
int fa[MAXN],K[MAXN]; int max(int x,int y)
{
return x>y?x:y;
}
int getHead(int x)
{
int a=x;
while(x!=fa[x]) x=fa[x];
fa[a]=x;
return 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,fa[x]=fa_y;K[fa_y]+=K[fa_x];}
Max=max(Max,K[fa_y]);
}
int main()
{
int n,t;
while(scanf("%d",&n)!=EOF){
t=;
int *a=new int[n];
int *b=new int[n];
for(int i=;i<=MAXN;i++){
K[i]=;
fa[i]=i;
}
Max=;
for(int i=;i<n;i++){
scanf("%d%d",&a[i],&b[i]);
Union(a[i],b[i]);
} printf("%d\n",Max);
}
return ;
}

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

  1. JS原生第三篇 (帅哥)

    1.1 数 组 1. 数组           看电影    电影院  座位 大的变量     里面可以放很多的值 var  arr = [1,3,57]; var ar = new Array(); ...

  2. iPad应用开发者的建议

    原文摘自Smashing Magazine<A Dad’s Plea To Developers of iPad Apps For Children> 我花了很长时间为孩子购买和测试iPa ...

  3. js基础第四天

    多个tab栏切换class封装 <style>         *{margin:0;padding:0;}         ul{list-style:none;}         .b ...

  4. js基本知识4

    1. 数组 看电影 电影院 座位 大的变量 里面可以放很多的值 var arr = [1,3,57]; var ar = new Array(); new object(); new Date() v ...

  5. 数据结构图文解析之:二叉堆详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  6. Core Animation编程指南

    本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原 ...

  7. O2O在线教育平台策划方案

    一.情景需求痛点: 学生: 1.除了上课上课,就是作业作业,学习太枯燥不好玩怎么办?——我就是想要玩玩玩! 2.第二天要交作业,老师不在,在家作业不懂怎么办?——我想要随身老师! 3.噢耶,周末不用上 ...

  8. !!!全球最流行开源硬件平台!不知道就OUT了!

    全球最流行的几个开源硬件平台!不知道就OUT了! 随着物联网的推广和普及,五年内全球会有200亿台智能设备的需求,而如今随着创客概念的兴起,开源硬件也越加的火热,让我们来看看现在都有哪些主流的开源硬件 ...

  9. JS操作DOM对象——JS基础知识(四)

    一.JavaScript的三个重要组成部分 (1)ECMAScript(欧洲计算机制造商协会) 制定JS的规范 (2)DOM(文档对象模型)重点学习对象 处理网页内容的方法和接口 (3)BOM(浏览器 ...

随机推荐

  1. memcache的分布式配置

    public static class MemcacheHelper { private static MemcachedClient mc; static MemcacheHelper() { St ...

  2. Outlook读取奇妙清单Wunderlist日历失败的解决办法

    错误: Outlook.com日历订阅奇妙清单的日历链接时报错 This calendar wasn't updated because of a problem with the publisher ...

  3. [ SNOI 2013 ] Quare

    Description 题目链接 求一张无向带权图的边双连通生成子图的最小代价. Solution 核心的思路是,一个点双连通分量肯定是一堆环的并. 考虑增量地构造这个边双连通图,每次把一个环并进去, ...

  4. <meta>详解

    一.元数据和<meta> 元数据是描述以提供关于其他数据的数据,在<meta>中,html document是被描述的数据,meta标签中包括的数据是描述html docume ...

  5. Spotlight安装

    刚才技术群的一个朋友在安装Spotligh出现了一些问题,所以本人临时写个简单的教程 1.下载安装包(安装包地址:https://pan.baidu.com/s/1c2tmqyc),解压,然后傻瓜式安 ...

  6. cmd命令002

    cd..--> 返回上一级目录 cd\ --> 返回根目录"cd /d e:"--> 将当前盘符切换到e盘,"cd users/admin"- ...

  7. 20针,14针,10针JTAG引脚对应关系

    J-Link是常用的调试工具,用于程序的调试和下载.常用的J-Link的的接口有很多种,常见的有20针,14针和10针. J-Link可以使用JTAG方式下载调试程序,也可以使用SWD方式.从引脚方面 ...

  8. com组件简单应用

    1.打开VS2010,新建ATL COM 项目,步骤:“文件” -->“新建” -->“项目”,选择“Visual C++” -->“ATL 项目” ,填写“名称” FirstCOM ...

  9. Windows SubSystem for Linux(WSL)设置默认和设置默认登陆用户

    使用wslconfig命令进行管理 1.  设置默认运行的linux系统 wslconfig /setdefault <DistributionName> 正如上面所说,如果执行wslco ...

  10. NET实现谷歌OCR的使用记录(CLOUD VISION API)

    1)购买VPS 2)配置一VPN 建议使用 cisco anycounect  |   ***会连接失败(切记,祭奠浪费的一天)大神可以帮我看下是什么问题 3)进入https://cloud.goog ...