博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1253:Kundu and Tree(组合数学)
阅读量:5025 次
发布时间:2019-06-12

本文共 858 字,大约阅读时间需要 2 分钟。

题目链接:

所有的三元组的可能情况数有ans0=C(n,3)。然后减去不符合条件的情况数。

假设被黑边相连的点形成一个特殊的连通块,在一个大小为x的连通块形成的过程中,ans减去cal(x)=C(x,3)+(n-x)*C(x,2)

代码如下

#include
using namespace std;typedef long long LL;const int N=5e4+5;const int mod=1000000007;int fa[N];LL d[N];LL ans,n;int Find(int x){ return x==fa[x]? x:fa[x]=Find(fa[x]);}int Union(int x,int y){ x=Find(x);y=Find(y); fa[x]=y; d[y]+=d[x];}void init(){ for(int i=1;i<=n;i++) fa[i]=i,d[i]=1;}LL cal(LL x){ return x*(x-1)*(x-2)/6+(n-x)*(x-1)*x/2;}int main(){ while(cin>>n) { init(); for(int i=1;i
>a>>b>>ch; if(ch=='b') Union(a,b); } ans=n*(n-1)*(n-2)/6; //ans0=C(n,3) for(int i=1;i<=n;i++) if(i==fa[i]) ans-=cal(d[i]); cout<
<

 

转载于:https://www.cnblogs.com/Just--Do--It/p/6403168.html

你可能感兴趣的文章
无谓的通宵加班之后的思索
查看>>
S1的小成果:MyKTV系统
查看>>
从setting文件导包
查看>>
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成...
查看>>
union和union all
查看>>
Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)
查看>>
PMD使用提醒
查看>>
Codeforces 887D Ratings and Reality Shows
查看>>
论文《A Generative Entity-Mention Model for Linking Entities with Knowledge Base》
查看>>
CentOS 6.7编译安装PHP 5.6
查看>>
Linux记录-salt分析
查看>>
Android Studio默认快捷键
查看>>
发布开源库到JCenter所遇到的一些问题记录
查看>>
第七周作业
查看>>
函数式编程与参数
查看>>
flush caches
查看>>
SSAS使用MDX生成脱机的多维数据集CUB文件
查看>>
ACM_hdu1102最小生成树练习
查看>>
MyBatis源码分析(一)--SqlSessionFactory的生成
查看>>
android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
查看>>