牛客多校第九场 E All men are brothers 并查集/组合论
题意:
一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体。现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法。
题解:
认识不认识用并查集维护即可,重点在于如何统计挑选方法。
每个回合两个人互相认识,排除两个人本就在一个小团体中的情况,实际上就是两个小团体结合为一个。
那么变得无效化的挑选方法,实际上就是两个人分别来自这两个小团体,剩下两个人来自其他小团体的情况。
从其他集合的所有元素先任取两个,再去掉来自同一集合的两个的情况。
减少的数量等于合并的两个集合大小乘以以上结果。
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long LL;
- typedef unsigned long long uLL;
- typedef long long ll;
- typedef pair<int, LL>P;
- const int M = 4e5 * + ;
- const LL mod = 1e9 + ;
- const LL lINF = 0x3f3f3f3f3f3f3f3f;
- #define ls (rt<<1)
- #define rs (rt<<1|1)
- int n, fa[M], ra[M], m;
- uLL num[M];
- void init(int n)
- {
- for (int i = ; i <= n; i++)
- {
- fa[i] = i;
- ra[i] = ;
- num[i] = ;
- }
- }
- int find(int x)
- {
- if (fa[x] == x)
- return x;
- else
- return fa[x] = find(fa[x]);
- }
- void unite(int x, int y)
- {
- x = find(x);
- y = find(y);
- if (ra[x] < ra[y])
- {
- fa[x] = y;
- num[y] += num[x];
- }
- else
- {
- fa[y] = x;
- num[x] += num[y];
- if (ra[x] == ra[y])
- ra[x]++;
- }
- }
- uLL ans;
- uLL sum;
- int l, r;
- int main()
- {
- scanf("%d%d", &n, &m);
- ans = (uLL)n *(n - )*(n - )/*(n - )/;
- cout<<ans<<endl;
- sum = ;
- init(n);
- while (m--)
- {
- scanf("%d%d", &l, &r);
- l = find(l);
- r = find(r);
- if (l == r)
- {
- cout<<ans<<endl;
- continue;
- }
- else
- {
- uLL lst = n - num[l] - num[r];
- uLL tmp;
- tmp = lst * (lst - ) / ;
- tmp = tmp - sum + num[l] * (num[l] - ) / + num[r] * (num[r] - ) / ;
- tmp = tmp * num[l] * num[r];
- ans -= tmp;
- cout<<ans<<endl;
- tmp = num[l] * (num[l] - ) / + num[r] * (num[r] - ) / ;
- sum -= tmp;
- unite(l, r);
- l = find(l);
- // r = find(r);
- // assert(l==r);
- sum += num[l] * (num[l] - ) / ;
- }
- }
- }
牛客多校第九场 E All men are brothers 并查集/组合论的更多相关文章
- 2019牛客多校第⑨场E All men are brothers(并查集+组合数学)
原题:https://ac.nowcoder.com/acm/contest/889/E 思路: 做并查集,维护每个集合大小,初始化操作前的总方案数,每次合并两个集合时减少的数量=合并的两个集合大小相 ...
- 2019牛客暑期多校训练营(第九场)All men are brothers——并查集&&组合数
题意 最初有 $n$ 个人且互不认识,接下来 $m$ 行,每行有 $x,y$,表示 $x$ 和 $y$ 交朋友,朋友关系满足自反性和传递性,每次输出当前选取4个人且互不认识的方案数. 分析 并查集维护 ...
- 牛客多校第九场 && ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解
题意1.1: 求\(\sum_{i=1}^n Fib^m\mod 1e9+9\),\(n\in[1, 1e9], m\in[1, 1e4]\) 思路1.1 我们首先需要知道斐波那契数列的通项是:\(F ...
- Cutting Bamboos(2019年牛客多校第九场H题+二分+主席树)
题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...
- 2018牛客多校第九场E(动态规划,思维,取模)
#include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...
- 2019牛客多校第九场AThe power of Fibonacci——扩展BM
题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...
- 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线
题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...
- 牛客多校第九场 A The power of Fibonacci 杜教bm解线性递推
题意:计算斐波那契数列前n项和的m次方模1e9 题解: $F[i] – F[i-1] – F[i-2] = 0$ $F[i]^2 – 2 F[i-1]^2 – 2 F[i-2]^2 + F[i-3] ...
- 牛客多校第九场 D Knapsack Cryptosystem 背包
题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度$2^{32}$肯定会炸,考虑一种类似bsgs的算法,先用$2^{16}$的时间遍历前一半物品 ...
随机推荐
- final关键字和static关键字
final关键字:最终态--修饰成员变量,成员方法,类 final修饰变量: 基本类型变量:该变量为常量不能被赋值 引用类型变量:该地址不能被概变 地址不能被概变的原因: final Student ...
- Faster-RCNN论文精读
State-of-the-art object detection networks depend on region proposal algorithms to hypothesize objec ...
- 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...
- 如何重置Magento管理用户、角色和资源的权限
场景1:所有的资源权限被设置为管理角色 步骤1:获取当前的管理角色详细信息 SELECT * FROM admin_role WHERE role_name = 'Administrators' /* ...
- 分布式项目web.xml配置文件的表头
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...
- microservice-cloud-03-provider-product-8001
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文 ...
- js手机滚屏效果
原文地址:https://github.com/yanhaijing/zepto.fullpage 第一步:基于移动端的浏览体验,在头部添加浏览器渲染的分辨率 <meta name=" ...
- Yii2的一些问题
Yii2中删除能不能串着用 Yii2中find.findAll有什么区别 Yii2中User::findOne($id)和User::find->where(['id'=>1])-> ...
- DOM学习总结(三)DOM访问/操作
DOM访问理解:找到这个标签元素,然后才能对它进行操作 1.getElementById() 方法document.getElementById(""); //通过id名字来找到 ...
- [SDOI2010]地精部落 题解
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...