2019牛客多校第⑨场E All men are brothers(并查集+组合数学)
原题:https://ac.nowcoder.com/acm/contest/889/E
思路:
做并查集,维护每个集合大小,初始化操作前的总方案数,每次合并两个集合时减少的数量=合并的两个集合大小相乘, 再乘以从其他集合中选出2个不在一个集合内的方案数。
从其他集合中选出2个不在一个集合内的方案数=任选2个的方案数-来自同一个集合的方案数
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll maxn=1e5+5;
ll fa[maxn],cnt[maxn];
ll n,m,tot;
ll find(ll x){
return x==fa[x]?x:fa[x]=find(fa[x]);
}
int main(){
cin>>n>>m;
for(ll i=1;i<=n;i++){
fa[i]=i;
cnt[i]=1;
}
tot=n;
ll x,y;
ll res=n*(n-1)*(n-2)/2/3;
if(res%4==0){
res=res/4*(n-3);
}
else res=(n-3)/4*res;
ll del=0;//计算所有>=2的集合中选两个的方案数之和
printf("%lld\n",res);
for(ll i=1;i<=m;i++){
scanf("%d%d",&x,&y);
if(find(x)!=find(y)){
if(tot<=4) res=0;
else{
ll s1=cnt[fa[x]],s2=cnt[fa[y]];
ll temp=(n-s1-s2)*(n-s1-s2-1)/2; //C(tot-2,2);
ll temp2=del;
temp2-=s1*(s1-1)/2+s2*(s2-1)/2;
del-=s1*(s1-1)/2+s2*(s2-1)/2;//先减,等一会加上合并之后的
res-=s1*s2*(temp-temp2);
ll s3=s1+s2;
del+=s3*(s3-1)/2;
ll fx=fa[x],fy=fa[y];
fa[fx]=fy;
cnt[fy]+=cnt[fx];
}
tot--;
}
printf("%lld\n",res);
}
}
2019牛客多校第⑨场E All men are brothers(并查集+组合数学)的更多相关文章
- 牛客多校第九场 E All men are brothers 并查集/组合论
题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体.现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法. 题解: 认识不认识用并查集维护即可, ...
- 2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- 2019牛客多校第一场E ABBA(DP)题解
链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语 ...
- [2019牛客多校第二场][G. Polygons]
题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保 ...
- 2019 牛客多校第一场 D Parity of Tuples
题目链接:https://ac.nowcoder.com/acm/contest/881/D 看此博客之前请先参阅吕凯飞的论文<集合幂级数的性质与应用及其快速算法>,论文中很多符号会被本文 ...
- 2019牛客多校第二场D-Kth Minimum Clique
Kth Minimum Clique 题目传送门 解题思路 我们可以从没有点开始,把点一个一个放进去,先把放入一个点的情况都存进按照权值排序的优先队列,每次在新出队的集合里增加一个新的点,为了避免重复 ...
- 2019牛客多校第二场H-Second Large Rectangle
Second Large Rectangle 题目传送门 解题思路 先求出每个点上的高,再利用单调栈分别求出每个点左右两边第一个高小于自己的位置,从而而得出最后一个大于等于自己的位置,进而求出自己的位 ...
- 2019牛客多校第二场F-Partition problem(搜索+剪枝)
Partition problem 题目传送门 解题思路 假设当前两队的对抗值为s,如果把红队中的一个人a分配到白队,s+= a对红队中所有人的对抗值,s-= a对白队中所有人的对抗值.所以我们可以先 ...
随机推荐
- 嵌入式C语言3.5 关键字---运算符
1. 算数运算符 + - A +/- B 要求A,B数据类型一致 * 乘法 / 除法 %取模 乘法CPU可能需要多个周期,甚至需要利用软件的模拟方法来实 ...
- MySQL 同一字段匹配多个值
delete from api_log WHERE curl LIKE '%.css' or curl LIKE '%.js' or curl LIKE '%.JPG'; 删除字段curl以 js,c ...
- qq传文件测试用例设计
- 为什么tcp-wrappers被Redhat Centos Fedora废弃?
1 简述 TCP wrappers is a simple tool to block incoming connection on application level. This was very ...
- spring cloud 使用Eureka作为服务注册中心
什么是Eureka? Eureka是在AWS上定位服务的REST服务. Eureka简单示例,仅作为学习参考 在pom文件引入相关的starter(起步依赖) /*定义使用的spring cloud ...
- 【题解】A Horrible Poem
题目大意 给出一个由小写英文字母组成的字符串 S,再给出 q 个询问,要求回答 S 某个子串的最短循环节. 如果字符串 B 是字符串 A 的循环节,那么 A 可以由 B 重复若干次得到. 输入格式 第 ...
- 54.Counting Bits( 计算1的个数)
Level: Medium 题目描述: Given a non negative integer number num. For every numbers i in the range 0 ≤ ...
- document.location window.location
document.location 和 window.location 取url的值的时候可以通用,但是 document是window的属性,所以不能直接用document.location =ur ...
- Web前端基础学习-2
盒子模型 在页面中,我们将所有的元素全部看做是一个盒子,页面布局就是将大大小小不同的盒子堆砌在一起,而一个盒子由以下几部分组成: padding:内边距,内容到边框的距离: margin:外边距,其他 ...
- 【异常】Caused by: java.lang.IllegalStateException: Method has too many Body parameters
出现此异常原因是引文使用feign客户端的时候,参数没有用注解修饰 1.1GET方式错误写法 @RequestMapping(value="/test", method=Reque ...