CodeUp Problem D: More is better
根据题目意思,输入的每一对A、B都是直接朋友,并且最后只会得到一个集合,该集合就是Mr Wang选择的男孩。
因此很容易写出代码,甚至不需要自己构建一个并查集,只需要使用C++的set模板,每次读入一对A、B,就把A、B插入集合,最后集合的大小就是Mr Wang选择的男孩个数。
但是只得了50分,仔细分析一下,可能是“只有一个集合”这一个假定错误,应该在输入数据中包含多个集合的假定下写代码。
转变思路为:
- 仍然用数组实现一个并查集。
- 另外开一个数组counts,counts[i]表示节点i为根节点时对应集合的大小。
- 维护一个计数器maxcnt,用来存当前大小最大的集合数量,每次进行集合合并时都尝试更新maxcnt。
- 合并完所有元素后也能得到最大集合的大小。
#include <cstdio>
#include <algorithm> using namespace std;
const int maxn = 10000010;
int maxcnt, cnts[maxn];
int father[maxn]; int FindFather(int father[], int b)
{
int x = b;
while (x != father[x])
{
x = father[x];
} int a = b;
while (a != father[a])
{
int z = father[a];
father[a] = x;
a = z;
}
return x;
}
void Union(int father[], int b1, int b2)
{
int fa1 = FindFather(father, b1);
int fa2 = FindFather(father, b2); if (fa1 != fa2)//这个判断一定一定不能少,如果不先判断fa1是否等于fa2,会导致同一个集合大小翻倍,导致出错
{
father[fa1] = fa2;
cnts[fa2] += cnts[fa1];
} maxcnt = max(maxcnt, cnts[fa2]);
return;
}
void Init(int father[], int n)
{
for (size_t i = 1; i <= n; i++)
{
father[i] = i;
cnts[i] = 1;
}
maxcnt = 1;
}
int main(int argc, char** argv) {
int linen, a, b;
while (scanf("%d", &linen) != EOF)
{
Init(father, maxn);
while (linen--)
{
scanf("%d%d", &a, &b);
Union(father, a, b);
} printf("%d\n", maxcnt);
} return 0;
}
CodeUp Problem D: More is better的更多相关文章
- Codeup 25609 Problem I 习题5-10 分数序列求和
题目描述 有如下分数序列 2/1,3/2,5/3,8/5,13/8,21/13 - 求出次数列的前20项之和. 请将结果的数据类型定义为double类型. 输入 无 输出 小数点后保留6位小数,末尾输 ...
- Codeup 25594 Problem H 例题5-8 Fibonacci数列
题目描述 输入一个正整数n,求Fibonacci数列的第n个数.Fibonacci数列的特点:第1,2个数为1,1.从第3个数开始,概述是前面两个数之和.即: 1,1,2,3,5,8,13,21 - ...
- Codeup 25593 Problem G 例题5-7 求圆周率pi的近似值
题目描述 用如下公式 4*Π = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 - 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不 ...
- 1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...
- No-args constructor for class X does not exist. Register an InstanceCreator with Gson for this type to fix this problem.
Gson解析JSON字符串时出现了下面的错误: No-args constructor for class X does not exist. Register an InstanceCreator ...
- C - NP-Hard Problem(二分图判定-染色法)
C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144 ...
- Time Consume Problem
I joined the NodeJS online Course three weeks ago, but now I'm late about 2 weeks. I pay the codesch ...
- Programming Contest Problem Types
Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
随机推荐
- 私有化轻量级持续集成部署方案--02-Nginx网关服务
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 这一篇中使用 Nginx 部署网关中心,用来代理服务器中服务.网关中心有优点也有缺点,也可以不采用网关系统. 部署 ...
- verification TLM传输数据导致多线程访问同一个数据
TLM传输数据导致多线程访问同一个数据 原因 TLM发送数据跟mailbox类似,都是发送的引用,这样发送端和接收端的引用都指向同一个数据,这样就会出现发送端修改数据会影响到接收端,比如发送的时候数据 ...
- vue如何获取thymeleaf渲染的input值?
写项目时前端用了vue+模板引擎用了thymeleaf,然后有一个输入框取值问题让我很纠结,问题如下: <input class="count-num" type=" ...
- 数据透视:Excel数据透视和Python数据透视
作者 | leo 早于90年代初,数据透视的概念就被提出,主要的应用场景是处理大量数据的交互式汇总查询,它实现了行或列的移动,使得行可以移到列上,列移到行上,从而根据使用者的诉求取对关注的数据子集进行 ...
- RFC2544优化步长测试——信而泰网络测试仪实操
一.测试拓扑 拓扑说明 1.测试仪两个端口和DUT两个端口相连 2.测试仪P1端口发出流量,经过DUT转发后,从B端口发出,进入测试仪P2端口. 二.测试思路 1.在测试仪端口上创建两个Interfa ...
- idea中maven配置 Unable to import maven project: See logs for details
Help -> show log in Explorer 1) No implementation for org.apache.maven.model.path.PathTranslator ...
- Linux系统发现占用CPU达100%的进程并处理
转至:https://blog.csdn.net/xinxin_2011/article/details/84936581 服务器使用的是Centos7.2 64位系统.发现服务器异常,一般先想到用t ...
- springMVC 调查问卷系统 record
Maven下的依赖包有两个 spring-web和springWebMVC springwebMVC包含spring-web依赖, 但是spring-web的等级大于Spring-webmvc 没有 ...
- kippo: 一款强大的SSH蜜罐工具
Kippo的安装 git clone https://github.com/desaster/kippo.git # 无法运行git命令,请先安装 yum -y install git由于我使用这个命 ...
- 安装java环境与eclipse
一.今天安装了java环境和eclipse 二.大道至简学了前三章(前两章)问题不大还好理解 第三章有些东西很懵 1.进入网址www.oracle.com,点击resource(资源) 点击softw ...