题意:

一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体。现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法。

题解:

认识不认识用并查集维护即可,重点在于如何统计挑选方法。

每个回合两个人互相认识,排除两个人本就在一个小团体中的情况,实际上就是两个小团体结合为一个。

那么变得无效化的挑选方法,实际上就是两个人分别来自这两个小团体,剩下两个人来自其他小团体的情况。

从其他集合的所有元素先任取两个,再去掉来自同一集合的两个的情况。

减少的数量等于合并的两个集合大小乘以以上结果。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. typedef unsigned long long uLL;
  5. typedef long long ll;
  6. typedef pair<int, LL>P;
  7. const int M = 4e5 * + ;
  8. const LL mod = 1e9 + ;
  9. const LL lINF = 0x3f3f3f3f3f3f3f3f;
  10. #define ls (rt<<1)
  11. #define rs (rt<<1|1)
  12. int n, fa[M], ra[M], m;
  13. uLL num[M];
  14. void init(int n)
  15. {
  16. for (int i = ; i <= n; i++)
  17. {
  18. fa[i] = i;
  19. ra[i] = ;
  20. num[i] = ;
  21. }
  22. }
  23. int find(int x)
  24. {
  25. if (fa[x] == x)
  26. return x;
  27. else
  28. return fa[x] = find(fa[x]);
  29. }
  30. void unite(int x, int y)
  31. {
  32. x = find(x);
  33. y = find(y);
  34. if (ra[x] < ra[y])
  35. {
  36. fa[x] = y;
  37. num[y] += num[x];
  38. }
  39. else
  40. {
  41. fa[y] = x;
  42. num[x] += num[y];
  43. if (ra[x] == ra[y])
  44. ra[x]++;
  45. }
  46. }
  47. uLL ans;
  48. uLL sum;
  49. int l, r;
  50. int main()
  51. {
  52. scanf("%d%d", &n, &m);
  53. ans = (uLL)n *(n - )*(n - )/*(n - )/;
  54. cout<<ans<<endl;
  55. sum = ;
  56. init(n);
  57. while (m--)
  58. {
  59. scanf("%d%d", &l, &r);
  60. l = find(l);
  61. r = find(r);
  62. if (l == r)
  63. {
  64. cout<<ans<<endl;
  65. continue;
  66. }
  67. else
  68. {
  69. uLL lst = n - num[l] - num[r];
  70. uLL tmp;
  71. tmp = lst * (lst - ) / ;
  72. tmp = tmp - sum + num[l] * (num[l] - ) / + num[r] * (num[r] - ) / ;
  73. tmp = tmp * num[l] * num[r];
  74. ans -= tmp;
  75. cout<<ans<<endl;
  76. tmp = num[l] * (num[l] - ) / + num[r] * (num[r] - ) / ;
  77. sum -= tmp;
  78. unite(l, r);
  79. l = find(l);
  80. // r = find(r);
  81. // assert(l==r);
  82. sum += num[l] * (num[l] - ) / ;
  83. }
  84. }
  85. }

牛客多校第九场 E All men are brothers 并查集/组合论的更多相关文章

  1. 2019牛客多校第⑨场E All men are brothers(并查集+组合数学)

    原题:https://ac.nowcoder.com/acm/contest/889/E 思路: 做并查集,维护每个集合大小,初始化操作前的总方案数,每次合并两个集合时减少的数量=合并的两个集合大小相 ...

  2. 2019牛客暑期多校训练营(第九场)All men are brothers——并查集&&组合数

    题意 最初有 $n$ 个人且互不认识,接下来 $m$ 行,每行有 $x,y$,表示 $x$ 和 $y$ 交朋友,朋友关系满足自反性和传递性,每次输出当前选取4个人且互不认识的方案数. 分析 并查集维护 ...

  3. 牛客多校第九场 && 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 ...

  4. Cutting Bamboos(2019年牛客多校第九场H题+二分+主席树)

    题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...

  5. 2018牛客多校第九场E(动态规划,思维,取模)

    #include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...

  6. 2019牛客多校第九场AThe power of Fibonacci——扩展BM

    题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...

  7. 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线

    题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...

  8. 牛客多校第九场 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] ...

  9. 牛客多校第九场 D Knapsack Cryptosystem 背包

    题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度$2^{32}$肯定会炸,考虑一种类似bsgs的算法,先用$2^{16}$的时间遍历前一半物品 ...

随机推荐

  1. final关键字和static关键字

    final关键字:最终态--修饰成员变量,成员方法,类 final修饰变量: 基本类型变量:该变量为常量不能被赋值 引用类型变量:该地址不能被概变 地址不能被概变的原因: final Student ...

  2. Faster-RCNN论文精读

    State-of-the-art object detection networks depend on region proposal algorithms to hypothesize objec ...

  3. 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,

    一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...

  4. 如何重置Magento管理用户、角色和资源的权限

    场景1:所有的资源权限被设置为管理角色 步骤1:获取当前的管理角色详细信息 SELECT * FROM admin_role WHERE role_name = 'Administrators' /* ...

  5. 分布式项目web.xml配置文件的表头

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  6. microservice-cloud-03-provider-product-8001

    server:  port: 8001 mybatis:  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文 ...

  7. js手机滚屏效果

    原文地址:https://github.com/yanhaijing/zepto.fullpage 第一步:基于移动端的浏览体验,在头部添加浏览器渲染的分辨率 <meta name=" ...

  8. Yii2的一些问题

    Yii2中删除能不能串着用 Yii2中find.findAll有什么区别 Yii2中User::findOne($id)和User::find->where(['id'=>1])-> ...

  9. DOM学习总结(三)DOM访问/操作

    DOM访问理解:找到这个标签元素,然后才能对它进行操作 1.getElementById() 方法document.getElementById(""); //通过id名字来找到 ...

  10. [SDOI2010]地精部落 题解

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...