第9场 E-All men are brothers(并查集)
题意:n个人,m次操作,每次操作使得两个人(x,y)成为朋友,朋友的关系是可以传递的,计算执行每次操作后,选择四个人两两都不是朋友的不同方案的数目。
数据范围:(n <= 100000,m <= 200000) (1 <= x <= n,1 <= y <= n,x≠y)
输入要求:
第一行包含两个整数,n和m
在下面的m行中,第i行包含两个整数x和y,这意味着第x个人和 y 这个人在第一轮交友。
第x个人和第y个人可能会在几个回合中结交朋友。
输出要求:
输出m + 1行,每行包含一个整数,即选出4个人的方案数。
在每轮操作开始前和结束后输出,因此有m + 1行。
思路:
我们把所有是朋友的分成一个集合,x所在集合为x集合,同理y集合,其它统一为z集合(里面有若干个并查集)。若x,y在同一个集合,则为(x+y)集合。
如果x,y不在同一集合,总共有x1+z3(x里面选1个,z里面选3个), y1+z3 ,x1+y1+z2 ,z4 ,这4种情况,
而x,y合并之后, 总共有 z4 , (x+y)1+z3【等价于 x1+z3, y1+z3】,所以如果需要合并,减去x1+y1+z2这个情况即可。
计算:
最开始所有人都互相不是朋友答案为 ,由于n比较大,需要用到 unsigned long long;
开始合并后:
若x,y不在同一集合,需要合并时,减去x1+y1+z2这种情况 ,
即 a*b*((n-a-b)*(n-a-b)-s+a*a+b*b)/2(a表示x集合人数,b表示y集合人数,s开始为总人数,更新为s+=2*a*b),这里涉及组合数学。
在同一集合时,输出上一轮的答案。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const int N=1e5+;
int f[N],c[N];
ll Find(int x)
{
return f[x]==x?x:f[x]=Find(f[x]);
}
int main()
{
ios::sync_with_stdio();
for(int i=;i<N;i++)
f[i]=i,c[i]=;
ll n; int m; cin>>n>>m;
ll ans=n*(n-)/*(n-)/*(n-)/,s=n;
while(m--){
cout<<ans<<endl;
int u,v; cin>>u>>v;
u=Find(u); v=Find(v);
if(u==v||ans==) continue;
ll a=c[u],b=c[v];
ans-=a*b*((n-a-b)*(n-a-b)-s+a*a+b*b)/;
s+=*a*b;
c[v]+=c[u];
f[u]=v;
}
cout<<ans<<endl;
return ;
}
参考博客:
https://blog.csdn.net/qq_41117236/article/details/99677875
https://www.cnblogs.com/1625--H/p/11359772.html
第9场 E-All men are brothers(并查集)的更多相关文章
- 2019牛客暑期多校训练营(第九场)All men are brothers——并查集&&组合数
题意 最初有 $n$ 个人且互不认识,接下来 $m$ 行,每行有 $x,y$,表示 $x$ 和 $y$ 交朋友,朋友关系满足自反性和传递性,每次输出当前选取4个人且互不认识的方案数. 分析 并查集维护 ...
- 2019牛客多校第⑨场E All men are brothers(并查集+组合数学)
原题:https://ac.nowcoder.com/acm/contest/889/E 思路: 做并查集,维护每个集合大小,初始化操作前的总方案数,每次合并两个集合时减少的数量=合并的两个集合大小相 ...
- 牛客多校第九场 E All men are brothers 并查集/组合论
题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体.现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法. 题解: 认识不认识用并查集维护即可, ...
- 2019牛客暑期多校训练营(第九场)E.All men are brothers(并查集+排列组合)
题意:现在有n个集合 每个集合大小为1 现在你可以把集合合并m次 每次会告诉你哪个集合合并 让你输出每次从不同的四个集合里各选出四个的组合方案 思路:我们可以想到用并查集模拟集合的合并 对于方案数 我 ...
- 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树
目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...
- 2019牛客暑期多校训练营(第九场) E-All men are brothers(并查集+组合数学)
>传送门< 题意:最初有 n个人且互不认识,接下来 m行,每行有 x,y表示x和y交朋友,朋友关系满足自反性和传递性,每次输出当前选取4个人且互不认识的方案数. 思路:比赛的时候知道是用并 ...
- 牛客网多校第4场 J Hash Function 【思维+并查集建边】
题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...
- All men are brothers
All men are brothers 牛客多校第九场E 给定n个人,起初互不认识 然后m各阶段 每个阶段有两个人x.y认识 求每个阶段选出四个人互不认识的方式 并查集 #include<bi ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
随机推荐
- 从0开始独立完成企业级Java电商网站开发(服务端)
数据表结构设计 唯一索引unique,保证数据唯一性 CREATE TABLE `mmall_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ...
- Vue运用
目录结构: ├── README.md 项目介绍 ├── index.html 入口页面 ├── build 构建脚本目录 │ ├── build-server.js 运行本地构建服务器,可以访问 ...
- Android_Fragment
(一) Faragment有自己的生命周期 Fragment依赖于Activity Fragmen通过getActivity()可以获取所在Activity:Activity通过FragmentMan ...
- C++智能指针类型转换
#include <iostream> #include <memory> struct Base { int a; virtual void f() const { std: ...
- 一文搭建自己博客/文档系统:搭建,自动编译和部署,域名,HTTPS,备案等
本文纯原创,搭建后的博客/文档网站可以参考: Java 全栈知识体系.如需转载请说明原处. 第一部分 - 博客/文档系统的搭建 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简 ...
- Python监控SQL Server数据库服务器磁盘使用情况
本篇博客总结一下Python采集SQL Server数据库服务器的磁盘使用信息,其实这里也是根据需求不断推进演化的一个历程,我们监控服务器的磁盘走了大概这样一个历程: 1:使用SQL Server作业 ...
- 学习笔记64_k邻近算法
1 .假定已知数据的各个属性值,以及其类型,例如: 电影名称 打斗镜头 接吻镜头 电影类别 m1 3 104 爱情片 m2 2 100 爱情片 m3 1 81 爱情片 m4 2 90 爱情片 w1 1 ...
- nginx篇高级用法之基于TCP/UDP的四层调度
nginx 从1.9版本开始支持基于TCP/UDP的四层调度,在编译nginx时使用--with-stream开启该模块 支持TCP/UDP调度时,支持给所有的软件做调度器,例如:nfs smb ft ...
- ElasticSearch(五):Mapping和常见字段类型
ElasticSearch(五):Mapping和常见字段类型 学习课程链接<Elasticsearch核心技术与实战> 什么是Mapping Mapping类似数据库中的schema的定 ...
- 爬虫之request库主要解析---参照慕课北理工嵩天
kv = {'key1':'value1','key2':'value2'} r = requests.request (' GET' , 'http://python123.io/ws' , par ...