热门标签 | 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;
}

 



推荐阅读
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
  • iOS 百度地图使用指南:基本定位与地理编码
    本文详细介绍如何在 iOS 应用中集成百度地图,实现基本的地图定位和地理编码功能。配置详情请参考官方文档:http://developer.baidu.com/map/index.php?title=iossdk ... [详细]
  • Linux中tput命令怎么用
    这篇文章主要介绍Linux中tput命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux常用命令tput命令将通过ter ... [详细]
  • 本文探讨了 Java 中 Unsafe.park 和 Object.wait 方法的区别,分析了它们的性能和适用场景,并提供了专业建议。 ... [详细]
  • 本文详细介绍了Dijkstra算法,该算法用于解决图中从单个源点到其他所有顶点的最短路径问题。 ... [详细]
  • YOLO由24层ConvNet和2层FCs组成。其核心思想是将图片均匀划分为多个gridcell,每个gridcell产生两个bbox和gridcell中如果存在对象,对象是各类的 ... [详细]
  • 题目描述了麦森数的相关背景和计算方法。麦森数是指形如2^p-1的素数,其中p也是一个素数。尽管p是素数时,2^p-1不一定是素数,但已知的麦森数在数学和计算机科学中有着重要的应用。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 前言:在攻读硕士学位期间,了解期刊的相关知识是非常重要的。本文将对国内外期刊进行简要介绍,并提供一些实用的参考资源。 ... [详细]
  • CentOS 7 中忘记 root 密码时的重置方法
    本文介绍了在 CentOS 7 环境下忘记 root 密码时如何重置密码的详细步骤。不同版本的 Linux 可能存在一定的差异,但本文提供的方法适用于大多数 CentOS 7 系统。 ... [详细]
  • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
  • Vue 中实现动态增删表单区域
    本文介绍如何在 Vue 项目中通过按钮实现表单区域的动态添加和删除功能。 ... [详细]
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社区 版权所有