hdu1856 选出更多的孩子
题目大意:
老师选取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 选出更多的孩子的更多相关文章
- JS原生第三篇 (帅哥)
1.1 数 组 1. 数组 看电影 电影院 座位 大的变量 里面可以放很多的值 var arr = [1,3,57]; var ar = new Array(); ...
- iPad应用开发者的建议
原文摘自Smashing Magazine<A Dad’s Plea To Developers of iPad Apps For Children> 我花了很长时间为孩子购买和测试iPa ...
- js基础第四天
多个tab栏切换class封装 <style> *{margin:0;padding:0;} ul{list-style:none;} .b ...
- js基本知识4
1. 数组 看电影 电影院 座位 大的变量 里面可以放很多的值 var arr = [1,3,57]; var ar = new Array(); new object(); new Date() v ...
- 数据结构图文解析之:二叉堆详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- Core Animation编程指南
本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原 ...
- O2O在线教育平台策划方案
一.情景需求痛点: 学生: 1.除了上课上课,就是作业作业,学习太枯燥不好玩怎么办?——我就是想要玩玩玩! 2.第二天要交作业,老师不在,在家作业不懂怎么办?——我想要随身老师! 3.噢耶,周末不用上 ...
- !!!全球最流行开源硬件平台!不知道就OUT了!
全球最流行的几个开源硬件平台!不知道就OUT了! 随着物联网的推广和普及,五年内全球会有200亿台智能设备的需求,而如今随着创客概念的兴起,开源硬件也越加的火热,让我们来看看现在都有哪些主流的开源硬件 ...
- JS操作DOM对象——JS基础知识(四)
一.JavaScript的三个重要组成部分 (1)ECMAScript(欧洲计算机制造商协会) 制定JS的规范 (2)DOM(文档对象模型)重点学习对象 处理网页内容的方法和接口 (3)BOM(浏览器 ...
随机推荐
- SASS @mixin 遇到的坑
@mixin borderTop($size:1px,$type:solid,$color:red){ border-top:$size $type $color; } .border_top{ @i ...
- webpack采坑十连跳
4.css.js一同打包进html ---------------- https://www.cnblogs.com/amiezhang/p/9723565.html 依赖内联插件 HtmlWebp ...
- Windows API函数大全三
7. API之位图.图标和光栅运算函数 BitBlt 将一幅位图从一个设备场景复制到另一个 CopyIcon 制作指定图标或鼠标指针的一个副本.这个副本从属于发出调用的应用程序 CopyImage 复 ...
- HttpMessageNotWritableException异常解决办法
昨天做多对多的时遇到这个错误,网上找了一大堆,都没有解决掉,这个异常是说要解析的对象解析不了,就有可能该对象为null了,为了测试,我把数据库的数据都填上去 结果还是报错 看来是时候debug下 ...
- 基于socketserver实现的并发(tcp和udp)
threading 线程 基于tcp协议:请求建立连接,然后开启进程 基于udp协议:直接开启新进程 基于tcp协议 import socketserver # 导入socketserver模块 # ...
- 微信小程序 图片加载失败处理方案
小程序端展示网络资源图片可能会失败,下面介绍一种自己的处理方法 1. js文件中判断图片 url 是否存在,存在则正常显示,不存在则替换url为本地默认图片 2. 当图片 url 存在,但是加载失败时 ...
- ES6学习笔记(6)----函数的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 函数的扩展 函数的默认值 : ES6可以为函数指定默认值 (1)指定默认值的两种方式 a.函数参 ...
- ios app跳转拨打电话界面,调用拨打电话功能
DNLogFUNC //两种方法都可以用 //这种据说是可以上appstore NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithF ...
- How the performance impacts your revenue-性能影响营收
看完国外一个APM厂商最后的一个业务介绍视频,终于想通了PE领域中最顶层的应用目标,也就是如标题所云.那么这个影响效果是如何做到的?最终的步骤其实很简单,也就是利用大数据进行分析.而自己先前还没有想到 ...
- SQL函数 Nullif
函数 Nullif 功能: 如果两个函数都为空字符串则返回null 语法: Nullif(参数1,参数2) 一般该函数与函数coalesc一起使用 例: coalesce ( nullif ( [参数 ...