题目传送门(内部题79)


输入格式

  第一行读入两个整数$n,e$表示节点数及$cwystc$已确定的有向边边数。
  接下来$e$行,每行两个整数$x,y$描述$cwystc$确定的边。


输出格式

  输出一个整数表示期望陪妹子的天数。


样例

见下发文件


数据范围与提示

  对于$30\%$的数据:$n\leqslant 300$
  对于另外i$20\%$的数据:$e=0$
  对于另外$20\%$的数据:$e=\frac{n\times (n-1)}{2}$
  对于$100\%$的数据:$n\leqslant 100,000,e\leqslant 100,000$


题解

先转化一下题意,即让我们求竞赛图的期望最小环的个数。

而对于一张竞赛图,其要么是一张拓扑图,要么存在一个三元环。

因为该图不存在环,于是问题转化为三元环计数。

考虑容斥,不妨设$p[i]$表示点$i$的出度,那么对于三元组$(i,x,y)\{x\in p[i],y\in p[i],x\neq y\}$不组成三元环,而且这样的三元组只会在第$i$点枚举一次。

不妨再设$q[i]$表示连接点$i$未确定的边数,那么期望要减去:

$$\frac{p[i]\times (p[i]-1)}{2}+p[i]\times \frac{q[i]}{2}+\frac{q[i]\times (1-q[i])}{2}\times \frac{1}{4}$$

时间复杂度:$\Theta(n+e)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
const int two=500000004;
const int six=166666668;
const int eig=125000001;
int n,e;
int du[100001],p[100001],q[100001];
long long ans;
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
int main()
{
scanf("%d%d",&n,&e);
while(e--)
{
int x,y;
scanf("%d%d",&x,&y);
du[x]++;du[y]++;p[x]++;
}
ans=1LL*n*(n-1)%mod*(n-2)%mod*six%mod;
for(int i=1;i<=n;i++)
{
q[i]=n-du[i]-1;
ans=(ans-1LL*p[i]*(p[i]-1)%mod*two%mod-1LL*p[i]*q[i]%mod*two%mod-1LL*q[i]*(q[i]-1)%mod*eig%mod+mod)%mod;
}
printf("%lld\n",ans);
return 0;
}

rp++

[CSP-S模拟测试]:环(图论+期望)的更多相关文章

  1. [CSP-S模拟测试]:走路(期望DP+分治消元)

    题目传送门(内部题100) 输入格式 第一行两个整数$n,m$,接下来$m$行每行两个整数$u,v$表示一条$u$连向$v$的边.不保证没有重边和自环. 输出格式 $n-1$行每行一个整数,第$i$行 ...

  2. [CSP-S模拟测试]:B(期望DP)

    题目传送门(内部题151) 输入格式 第一行一个整数$N$. 第二行$N$个整数,第$i$个为$a_i$. 输出格式 一行一个整数,表示答案.为避免精度误差,答案对$323232323$取模. 即设答 ...

  3. [CSP-S模拟测试]:简单的期望(DP)

    题目描述 从前有个变量$x$,它的初始值已给出. 你会依次执行$n$次操作,每次操作有$p\%$的概率令$x=x\times 2$,$(100−p)\%$的概率令$x=x+1$. 假设最后得到的值为$ ...

  4. [CSP-S模拟测试]:chemistry(期望DP+组合数学)

    题目传送门(内部题27) 输入格式 第一行有$4$个整数$n,k,p,q$.第二行有$n$个整数$a_i$.接下来有$n-1$行,每行有两个整数$u,v$,表示$u$与$v$之间通过化学单键连接. 输 ...

  5. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  6. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  7. DotNetCore跨平台~Moq框架实现模拟测试

    回到目录 当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是 ...

  8. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  9. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

随机推荐

  1. Java第五周作业+总结

    实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...

  2. [19/10/14-星期一] Python中的对象和类

    一.面向对象 ## 什么是对象? - 对象是内存中专门用来存储数据的一块区域. - 对象中可以存放各种数据(比如:数字.布尔值.代码) - 对象由三部分组成: 1.对象的标识(id) 2.对象的类型( ...

  3. uva-315.network(连通图的割点)

    本题大意:求一个无向图额割点的个数. 本题思路:建图之后打一遍模板. /**************************************************************** ...

  4. poj1236-Tarjan算法

    题目大意: 一些学校连成了网络, 在学校之间存在某个协议:每个学校都维护一张传送表,表明他们要负责将收到的软件传送到表中的所有学校.如果A在B的表中,那么B不一定在A的表中. 现在的任务就是,给出所有 ...

  5. JetBrains插件

    1,翻译插件 TranslationPlugin 打开翻译对话框 : Ctrl + Shift + O(英文字母o) 鼠标取词并翻译 : Ctrl + Shift + Y http://yiiguxi ...

  6. django字段类型(Field types)介绍

    字段类型(Field types) AutoField 它是一个根据 ID 自增长的 IntegerField 字段.通常,你不必直接使用该字段.如果你没在别的字段上指定主 键,Django 就会自动 ...

  7. flask之上下文管理

    简单来说,falsk上下文管理可以分为三个阶段: 1.请求进来时,将请求鞋底的相关数据放入上下文管理中进行管理 2.在视图函数中,要去上下文管理中取值 3.请求响应之后,要将上下文管理中的数据清除 详 ...

  8. php 爬虫爱奇艺 视频、内容

    ,][];   ][];   ][]);   ][]);   ]);    ][]; ][]; ][])) {     ][];   }][])) {     ][];   }   ][];   ; ...

  9. Datatable中对某列求和,三种不同情况下的方法

    C# code 方法一. object sumObject = DataTable.Compute("sum(Qty)", "TRUE"); 直接对数据表中的字 ...

  10. mysql的innodb 引擎 表锁与行锁

    innodb 引擎 行锁与表锁 行锁与表锁是基于索引来说的(且索引要生效) 不带索引 (表锁)要全表扫描 1. 执行select @@autocommit; 查看结果 0是不自动提交事务,1是自动提交 ...