2019牛客暑期多校训练营(第九场)-E All men are brothers
题目链接: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相关推荐
- 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∏bj=c∏d ...
- 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∗ ...
- 2019牛客暑期多校训练营(第四场)----E- triples II
首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/884/E 来源:牛客网 涉及:位运算,容斥定义,dp 点击这里回到2019牛客暑期多校训练营解题-目 ...
- 2019牛客暑期多校训练营(第三场)H.Magic Line
2019牛客暑期多校训练营(第三场)H.Magic Line 题目链接 题目描述 There are always some problems that seem simple but is diff ...
- 2019牛客暑期多校训练营(第九场)H Cutting Bamboos(主席树+二分)
链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 题目描述 There are n bamboos arranged in a line. The ...
- 2019牛客暑期多校训练营(第九场)A——The power of Fibonacci(循环节+中国剩余定理(互质)||广义BM)
链接:https://ac.nowcoder.com/acm/contest/889/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)
题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...
- 2019牛客暑期多校训练营(第一场)E-ABBA(dp)
链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 2019牛客暑期多校训练营(第一场)
传送门 参考资料: [1]:官方题解(提取码:t050 ) [2]:标程(提取码:rvxr ) [3]:牛客题解汇总 A.Equivalent Prefixes(单调栈) •题意 定义两个数组 u,v ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
最新文章
- 素数分布 - nefu 117
- C++17标准制定完成
- Json串和java对象进行转时
- 分享网页设计当中使用进度条打造精美界面最佳例子
- node redis集群_如何使用集群扩展Node.js服务器
- Tomcat 学习过程4
- 炮灰模型---------- 对女生选择追求者的数学模型的建立
- oracle数据库基本概念
- linux 查看ip和路由,Linux route命令详解:查看和操作IP路由表
- Prescan入门教程之避坑笔记:初学者初用
- Android应用开发中半透明效果实现方案
- 计算机复制功能快捷键,电脑复制快捷键是什么(全部复制粘贴的快捷键是什么)...
- MATLAB命令大全
- 微软:从“开源是毒瘤”到“我爱 Linux”的 20 年
- 电视与电脑连接html线,电视机与电脑连接的方法
- 2018-2019-1 20165309 20165312 20165330 实验一 开发环境的熟悉
- Excel导入poi、导出poi
- 数据库导入导出方法以及注意事项
- 允许asp.net web程序的跨域访问
- 十大销售管理软件排行榜