BZOJ——2438: [中山市选2011]杀人游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=2438
Description
Input
第一行有两个整数 N,M。
接下来有 M 行,每行两个整数 x,y,表示 x 认识 y(y 不一定认识 x,例如周恩来同志) 。
Output
仅包含一行一个实数,保留小数点后面 6 位,表示最大概率。
Sample Input
1 2
1 3
1 4
1 5
Sample Output
HINT
警察只需要查证 1。假如1是杀手,警察就会被杀。假如 1不是杀手,他会告诉警
察 2,3,4,5 谁是杀手。而 1 是杀手的概率是 0.2,所以能知道谁是杀手但没被杀的概
率是0.8。对于 100%的数据有 1≤N ≤ 10 0000,0≤M ≤ 30 0000
数据已加强!
Source
杀手与村民为对立事件,警察存活概率=1-p(被杀), p(被杀)=可能为杀手的人数/n
因为警察根据最优情况选人,那么求出scc,警察第一个人会选择入度为零的scc,算出这些scc成为杀手的概率即可
(一个scc成为杀手的概率为 1/n ,因为在一个scc中问一个人就可以知道此块中的所有信息)
特别的:如果存在一个独立的scc(可以根据访问别的人判断此块信息,即该块只有一个人,连出去的点的入读>1),
则该scc不需要统计,因为可以通过别的推断出,即 cnt--
#include <cstdio> #define min(a,b) (a<b?a:b) inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N();
const int M(); int n,m,sumedge,cnt;
int head[N],_v[M<<],_nex[M<<]; inline void ins(int u,int v)
{
_v[++sumedge]=v;
_nex[sumedge]=head[u];
head[u]=sumedge;
} int tim,dfn[N],low[N],rd[N];
int top,Stack[N],instack[N];
int sumcol,col[N],point[N]; void DFS(int u)
{
dfn[u]=low[u]= ++tim;
Stack[++top]=u; instack[u]=;
for(int i=head[u]; i; i=_nex[i])
{
if(!dfn[_v[i]]) DFS(_v[i]),low[u]=min(low[u],low[_v[i]]);
else if(instack[_v[i]]) low[u]=min(low[u],dfn[_v[i]]);
}
if(low[u]!=dfn[u]) return ;
point[col[u]= ++sumcol] ++;
for(; Stack[top]!=u; --top)
{
point[sumcol]++;
instack[Stack[top]]=;
col[Stack[top]]=sumcol;
}
instack[u]=, --top;
} int Presist()
{
read(n),read(m);
for(int u,v,i=; i<=m; ++i)
read(u),read(v),ins(u,v);
for(int i=; i<=n; ++i)
if(!dfn[i]) DFS(i);
for(int u=; u<=n; ++u)
for(int i=head[u]; i; i=_nex[i])
if(col[u]!=col[_v[i]]) rd[col[_v[i]]]++;
for(int i=; i<=sumcol; ++i) cnt+=(!rd[i]);
for(int u=; u<=n; ++u)
{
if(rd[col[u]]||point[col[u]]>) continue;
for(int i=head[u]; i; i=_nex[i])
if(rd[col[_v[i]]]<) goto next_;
cnt--; break; next_:;
}
printf("%.6lf\n",*.-.*cnt/n);
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
BZOJ——2438: [中山市选2011]杀人游戏的更多相关文章
- bzoj 2438 [中山市选2011]杀人游戏(SCC+概率)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2438 [题意] N个人中有一个杀手,每次询问一个人可能被杀或被告知其认识的人中谁是杀手 ...
- BZOJ 2438: [中山市选2011]杀人游戏
Description 给你一个有向图,求至少询问多少次能够得到全部点的信息. Sol Tarjan + 强连通分量缩点 + 判断. 先缩点,如果我们知道了强连通分量里的任意一个点,我们就可以知道这些 ...
- [bzoj 2438][中山市选2011]杀人游戏 概率+tarjan
考试的时候想了很多,不知道它那个概率究竟是怎么算..没想到能蒙30分.rp爆发hhh 题解转自不知道哪里来的老师发的(代码出自自己). 实际上警察就是两种结果——查到犯人或死亡,而死亡事件一定是包含在 ...
- [BZOJ 2438] [中山市选2011]杀人游戏 Tarjan缩点
这个题很容易想到正解就是缩点找入度为零的点,那么我们考虑一种特殊情况就是,一个入度为零的点我们不访问他就知道他是不是凶手,那么这样的话就是:I. 他是一个真·孤立的点 II. 他在图里但是在他的强联通 ...
- BZOJ 2438 [中山市选2011]杀人游戏 ——期望DP
发现每一次死亡的几率相等,所以只需要判断最少问多少人即可. 并且环上的点任意询问都可以. 所以直接Tarjan缩点,然后计算入度为0的点的数目. 但是还有一些情况的时候会减少一次询问,比如说:$1-& ...
- bzoj 2438: [中山市选2011]杀人游戏【tarjan】
没看太懂题意orz 最优的是tarjan缩点之后问入度为0的点,因为问这个点可以知道整个块的情况 答案是这ans个入度为0的点都不是杀手的概率\( \frac{n-ans}{n} \) 但是有特殊情况 ...
- bzoj2438: [中山市选2011]杀人游戏(强联通+特判)
2438: [中山市选2011]杀人游戏 题目:传送门 简要题意: 给出n个点,m条有向边,进行最少的访问并且可以便利(n-1)个点,求这个方案成功的概率 题解: 一道非常好的题目! 题目要知道最大的 ...
- BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量
BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量 Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 ...
- bzoj2438[中山市选2011]杀人游戏
Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面, 查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他 认识的人, ...
随机推荐
- destoon 信息发布表单提交验证
sell 模块的form表单如下: <form method="post" id="dform" action="?" target= ...
- paper:synthesizable finit state machine design techniques using the new systemverilog 3.0 enhancements之onehot coding styles(index-parameter style with registered outputs)
case语句中,对于state/next 矢量仅仅做了1-bit比较. parameter 值不是表示FSM的状态编码,而是表示state/next变量的索引.
- java做http接口
问题描述 我要对外提供一个http接口给别人调用...但是我不知道用java怎么做这个接口.请大家详细给我讲讲.从开发到如何发布到服务器.谢谢了 解决方案 如果你这个很简单的话,而且数量也很少,建议直 ...
- centos7 安装显卡驱动方法
方法一: 首先需要添加一个第三方的源ELRepo.这个源支持RED HAT系的Linux系统,主要是提供一些硬件的驱动程序.这个源的主页如下: http://elrepo.org/tiki/tiki- ...
- 利用PowerDesigner逆向工程导出PDM模型及生成文档
原文:利用PowerDesigner逆向工程导出PDM模型及生成文档 最近需要对老项目进行重构优化,由于项目都是好几年前的,相关设计资料很不全,最基本的数据库设计文档都没有,只能利用PowerDesi ...
- HDU 1533 二分图最小权匹配 Going Home
带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配. 最后再把答案取一下反即可. #include <iostream> #include <cst ...
- STF 连接其它操作系统上的安卓设备实操介绍【转】
功能简介:https://www.jianshu.com/p/464fadaeb1d7 搭建教程:https://blog.csdn.net/xl_lx/article/details/7944586 ...
- 用qemu+gdb tcp server+CDT调试linux内核启动-起步
用qemu+gdb tcp server+CDT调试linux内核启动-起步 说明: 环境信息与 用virtualbox+模拟串口+CDT调试linux内核 TCP IP协议栈-起步 提到的一样,并且 ...
- python学习-- 两种方式查看自己的Django版本
[第一种方式] Windows系统下 按住Windows按键 + R 进入搜索:搜索CMD进入控制台:输入Python进入Python解释器 Linux系统下 直接使用终端调用Python解释器 接下 ...
- HDU-3592 World Exhibition
差分约束. 很容易看出两种约束方式,然后建图.而且题目要求排序不能乱,于是加上第三种约束. 求最长就跑一遍最短路啊就行了. #include <cstdlib> #include < ...