题目链接:https://ac.nowcoder.com/acm/contest/889/E

题意:n个人,m次操作,每次合并两个人,求合并后找出4个人,且两两不在一个集合的方案数。

思路:最开始有C[n][4]种方案,每次合并我们计算出减少了多少方案数即可。减少的为本次合并的两个集合的大小的乘积,再乘以从剩余集合中选出两个不在一个集合的方案数,这可以通过算出任意两个人的方案数,减去,在同一个集合的两个人的方案数得到。集合的大小通过并查集操作维护,并用前缀和思想记录此时选出在同一个集合的两个人的方案数sum。预处理得到组合数,只用预处理到C(n,4)即可。总复杂度为O(mlogn)。

AC代码:

#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;typedef long long LL;
const int maxn=1e5+5;
int n,m,root[maxn],siz[maxn];
LL ans,sum,C[maxn][5];void init(){C[1][0]=1,C[1][1]=1;C[2][0]=1,C[2][1]=2,C[2][2]=1;C[3][0]=1,C[3][1]=3,C[3][2]=3,C[3][3]=1;for(int i=4;i<maxn;++i){C[i][0]=1;for(int j=1;j<=4;++j)C[i][j]=C[i-1][j-1]+C[i-1][j];}
}int getr(int k){if(root[k]==k) return k;else return root[k]=getr(root[k]);
}int main(){init();scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)root[i]=i,siz[i]=1;ans=C[n][4];printf("%lld\n",ans);while(m--){int x,y;scanf("%d%d",&x,&y);int xr=getr(x),yr=getr(y);if(xr==yr){printf("%lld\n",ans);continue;}LL tx=0,ty=0;if(siz[xr]>=2) tx=C[siz[xr]][2];if(siz[yr]>=2) ty=C[siz[yr]][2];sum-=tx+ty;ans-=1LL*siz[xr]*siz[yr]*(C[n-siz[xr]-siz[yr]][2]-sum);printf("%lld\n",ans);root[yr]=xr;siz[xr]+=siz[yr];sum+=C[siz[xr]][2];}return 0;
}

转载于:https://www.cnblogs.com/FrankChen831X/p/11362450.html

2019牛客暑期多校训练营(第九场)-E All men are brothers相关推荐

  1. 2020牛客暑期多校训练营(第九场)E题 Groundhog Chasing Death

    题意 计算 ∏ i = a b ∏ j = c d g c d ( x i , y j ) \prod_{i=a}^{b}\prod_{j=c}^{d}gcd(x^i,y^j) i=a∏b​j=c∏d ...

  2. 2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)

    2019牛客暑期多校训练营(第五场)C generator 2 思路 x0=x0x_0 = x_0x0​=x0​ x1=a∗x0∗bx_1 = a * x_0 * bx1​=a∗x0​∗b x2=a∗ ...

  3. 2019牛客暑期多校训练营(第四场)----E- triples II

    首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/884/E 来源:牛客网 涉及:位运算,容斥定义,dp 点击这里回到2019牛客暑期多校训练营解题-目 ...

  4. 2019牛客暑期多校训练营(第三场)H.Magic Line

    2019牛客暑期多校训练营(第三场)H.Magic Line 题目链接 题目描述 There are always some problems that seem simple but is diff ...

  5. 2019牛客暑期多校训练营(第九场)H Cutting Bamboos(主席树+二分)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 题目描述 There are n bamboos arranged in a line. The ...

  6. 2019牛客暑期多校训练营(第九场)A——The power of Fibonacci(循环节+中国剩余定理(互质)||广义BM)

    链接:https://ac.nowcoder.com/acm/contest/889/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言5242 ...

  7. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...

  8. 2019牛客暑期多校训练营(第一场)E-ABBA(dp)

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  9. 2019牛客暑期多校训练营(第一场)

    传送门 参考资料: [1]:官方题解(提取码:t050 ) [2]:标程(提取码:rvxr ) [3]:牛客题解汇总 A.Equivalent Prefixes(单调栈) •题意 定义两个数组 u,v ...

  10. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

最新文章

  1. 素数分布 - nefu 117
  2. C++17标准制定完成
  3. Json串和java对象进行转时
  4. 分享网页设计当中使用进度条打造精美界面最佳例子
  5. node redis集群_如何使用集群扩展Node.js服务器
  6. Tomcat 学习过程4
  7. ‍炮灰模型---------- 对女生选择追求者的数学模型的建立
  8. oracle数据库基本概念
  9. linux 查看ip和路由,Linux route命令详解:查看和操作IP路由表
  10. Prescan入门教程之避坑笔记:初学者初用
  11. Android应用开发中半透明效果实现方案
  12. 计算机复制功能快捷键,电脑复制快捷键是什么(全部复制粘贴的快捷键是什么)...
  13. MATLAB命令大全
  14. 微软:从“开源是毒瘤”到“我爱 Linux”的 20 年
  15. 电视与电脑连接html线,电视机与电脑连接的方法
  16. 2018-2019-1 20165309 20165312 20165330 实验一 开发环境的熟悉
  17. Excel导入poi、导出poi
  18. 数据库导入导出方法以及注意事项
  19. 允许asp.net web程序的跨域访问
  20. 十大销售管理软件排行榜

热门文章

  1. C# winfrom 通过代码 删除TableLayoutPanel控件的一行或列
  2. 【SQL进阶】03.执行计划之旅1 - 初探
  3. 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)
  4. oracle的connect by语句
  5. statistics DATA in CHINA
  6. how can we make wise decisions?
  7. 【转】C++ traits技术
  8. ubuntu配置文件对照表
  9. DM 源码阅读系列文章(二)整体架构介绍
  10. html5/css3响应式页面开发总结