热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

UPC10525:Dove打扑克

时间限制: 1Sec  内存限制: 128MB提交: 33  解决: 11[提交][状态][讨论版][命题人:admin]题目描述Dove和Cicada是好朋友,他们经常在一起打扑

时间限制: 1 Sec  内存限制: 128 MB
提交: 33  解决: 11
[提交] [状态] [讨论版] [命题人:admin]

题目描述


Dove和Cicada是好朋友,他们经常在一起打扑克来消遣时光,但是他们打的扑克有不同的玩法。
最开始时,牌桌上有n个牌堆,每个牌堆有且仅有一张牌,第i个牌堆里那个扑克牌的编号为i,任意两张牌仅有标号不同。游戏会进行m轮,每轮Dove可以执行下列操作之一:
·1 x y,将编号为x,y的牌所在的牌堆合并,如果此时x,y已在同一牌堆中,那么不进行任何操作。
·2 c,询问有多少对牌堆的牌数之差不少于c。形式化的,对于当前的r个牌堆中,有多少对i,j(i每次Cicada都不能很快的回答出Dove的询问,为了不让Cicada难堪,Dove想要写一个小程序来帮助Cicada,但是Dove还要学高考,所以这个任务就交给你啦!

 


输入


第一行两个空格隔开的整数n,m。
接下来m行,每行1 x y或者2 c,具体含义如上文所示。 (n,c≤105,m≤3×105)

 


输出


对于每个询问,输出一行一个整数表示答案。

 


样例输入


8 4
2 1
2 2
1 1 1
2 0

样例输出

0
0
28

 


来源/分类

衡水2018NOIP考前集训 


 
用并查集模拟合并操作,计算小于c的对数,总对数-小于c的对数即为ans
 

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const int maxn = 3e5 + 10;
ll fa[maxn], cnt[maxn], val[maxn];
ll all;
set num;
ll findd(ll x) {
return fa[x] == x ? x : fa[x] = findd(fa[x]);
}
void uni(ll a, ll b) {
ll p1 = findd(a), p2 = findd(b);
if (p1 != p2) {
cnt[val[p1]]--;
cnt[val[p2]]--;
if (cnt[val[p1]] == 0) num.erase(val[p1]);
if (cnt[val[p2]] == 0) num.erase(val[p2]);
cnt[val[p1] + val[p2]]++;
num.insert(val[p1] + val[p2]);
fa[p2] = p1;
val[p1] += val[p2];
all--;
}
}
void init(ll n) {
cnt[1] = n;
all = n;
num.insert(1);
for (ll i = 1; i <= n; i++) {
fa[i] = i;
val[i] = 1;
}
}
int main() {
freopen("input.txt", "r", stdin);
ll n, m;
scanf("%lld %lld", &n, &m);
init(n);
ll op;
ll x, y;
for (ll i = 0; i scanf("%lld", &op);
if (op == 1) {
scanf("%lld %lld", &x, &y);
uni(x, y);
} else {
scanf("%lld", &x);
set::iterator it, j;
it = num.begin();
j = it;
ll sum = 0;
ll ans = 0;
for (; it != num.end(); it++) {
while (j != num.end() && (*j - *it sum += cnt[*j];
j++;
}
sum -= cnt[*it];
if (x > 0) ans += 1ll * cnt[*it] * (cnt[*it] - 1) / 2;
ans = ans + cnt[*it] * sum;
}
printf("%lld\n", all * (all - 1) / 2 - ans);
}
}
return 0;
}

 



推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
author-avatar
YooHoo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有