【强连通分量+概率】Bzoj2438 杀人游戏

Description

一位冷血的杀手潜入 Na-wiat,并假装成平民。警察希望能在 N 个人里面,查出谁是杀手。 
警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是杀手, 谁是平民。 假如查证的对象是杀手, 杀手将会把警察干掉。 
现在警察掌握了每一个人认识谁。 
每一个人都有可能是杀手,可看作他们是杀手的概率是相同的。 
问:根据最优的情况,保证警察自身安全并知道谁是杀手的概率最大是多少?

 

Sulotion

最优的询问对象是,把强连通分量缩成一个点(问其中一个可推出所有,只要不第一次问就是罪犯可以一直安全),问那些入度为0的(这里相当于再把连通的缩为一个点)。

这样我们就得到了一些互不相干的点集,怎么计算概率呢?设点集大小为s1,s2,..

那么ans=(n-1)/n(第一次问不是罪犯)*[(s1-1/n-1)(集合在第一点集中)+((n-s1)/(n-1))*((n-s1-1)/(n-s1))*((s2-1)*(n-s1-1))(分别为,不在第一点集,第二次不问到罪犯,在第二点集的概率)+...]。

上面的式子分子分母可以连着消掉,然后得到ans=(n-tot)/n, tot为点集个数,也就是缩点后入度为0的点。

有一种特殊情况(连通题做一道一道特殊情况...)

如果有一个单独地点(大小为1&&入度为0&&不影响其它点入度是否为0),那么其他的都确定了,他自然也就可以肯定了,也不会对别的点有影响,不用算入tot。

 

Code

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=1e5+5,maxm=3e5+5;
 5 
 6 int pre[maxn],low[maxn],scc[maxn],clock,cnt;
 7 int head[maxn],f[maxm],e[maxm],nxt[maxm],k;
 8 int adde(int u,int v){
 9     e[++k]=v,f[k]=u;
10     nxt[k]=head[u],head[u]=k;
11 }
12 int n,m,r[maxn],a[maxn],t;
13 int size[maxn],num[maxn];
14 
15 int dfs(int u){
16     pre[u]=low[u]=++clock;
17     a[++t]=u;
18     for(int i=head[u];i;i=nxt[i]){
19         int v=e[i];
20         if(!pre[v]){
21             dfs(v);
22             low[u]=min(low[u],low[v]);
23         }
24         else if(!scc[v]){
25             low[u]=min(low[u],pre[v]);
26         }
27     }
28     if(low[u]==pre[u]){
29         num[++cnt]=u;
30         while(t){
31             scc[a[t]]=cnt;
32             size[cnt]++;
33             if(a[t--]==u) break;
34         }
35     }
36 }
37 
38 int pd(int x){
39     int u=num[x];
40     for(int i=head[u];i;i=nxt[i])
41         if(r[scc[e[i]]]==1) return 0;
42     return 1;
43 }
44 
45 int main(){
46     scanf("%d%d",&n,&m);
47     int u,v;
48     for(int i=1;i<=m;i++){
49         scanf("%d%d",&u,&v);
50         adde(u,v);
51     }
52     
53     for(int i=1;i<=n;i++)
54         if(!pre[i]) dfs(i);
55         
56     for(int i=1;i<=k;i++)
57         if(scc[f[i]]!=scc[e[i]]) r[scc[e[i]]]++;
58         
59     int ans=0;
60     for(int i=1;i<=cnt;i++) 
61         if(!r[i]) ans++;
62     
63     for(int i=1;i<=cnt;i++)
64         if(size[i]==1&&!r[i]&&pd(i)){
65             ans--;
66             break;
67         }
68         
69     printf("%.6lf",(double)(n-ans)/n);
70     return 0;
71 }
View Code

 

转载于:https://www.cnblogs.com/xkui/p/4552391.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

serialversionuid的作用_为什么阿里Java规约要求谨慎修改serialVersionUID字段

serialVersionUID简要介绍serialVersionUID是在Java序列化、反序列化对象时起作用的一个字段。Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时&#xff0c;JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进…

常用工具说明--搭建基于rietveld的CodeReview平台(未测试)

为什么要codereview . 整个团队的编码风格是统一的。 . 有高手能对自己的代码指点一二&#xff0c;从而提高编码水平。 . 减少低级错误的出现 . 约束自己写高质量的代码&#xff0c;因为是要给人看的。 我们对codereview的需求 . 很轻松可以发布自己写的代码。 . 很轻松的可以与…

postman调用webservice接口_接口对前后端和测试的意义

1.什么是接口&#xff1f;接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过一些特殊的规则也就是协议&#xff0c;来进行数据之间的交互。2.接口都有哪些类型&#xff1f;接口…

基于代数距离的椭圆拟合

问题 给定离散点集Xi(xi,yi),i1,2,...NX_i(x_i,y_i) ,i1,2,...NXi​(xi​,yi​),i1,2,...N&#xff0c;我们希望找到误差最小的椭圆去拟合这些离散点。 方法 由于椭圆的形式可以给定&#xff0c; 自然我们将使用最小二乘法来求解椭圆。主要依据论文《Direct least squares f…

Android调试技巧之Eclipse行号和Logcat

很多初入Android的开发者可能会发现经常遇到Force Close或ANR这样的问题&#xff0c;一般我们通过Android系统的错误日志打印工具Logcat可以看到出错的内容&#xff0c;今天一起来说下如何通过 Eclipse行号和Logcat捕捉出错点&#xff0c;我们遇到错误可以首先在Eclipse的DDMS中…

js打开本地文件夹_vue + ArcGIS 地图应用系列一:arcgis api本地部署(开发环境)

1. 下载 ArcGIS API for JavaScript 官网地址&#xff1a; https://developers.arcgis.com/javascript/3/ 下载地址&#xff1a;http://links.esri.com/javascript-api/latest-download需要稳定的网络环境注册账号后才可以下载下载完成后解压文件&#xff0c;文件比较大可能需要…

基于几何距离的椭圆拟合

问题 给定离散点集Xi(xi,yi)X_i(x_i,y_i)Xi​(xi​,yi​)&#xff0c;我们希望找到最好的椭圆去拟合这些离散点。 方法 通常我们使用最小二乘法求解如下的最优化问题&#xff1a; Min∑i1Nf(xi,E)2Min \sum_{i1}^N f(x_i,E)^2 Mini1∑N​f(xi​,E)2 这里f(xi,E)f(x_i,E)f(xi…

nohup命令输出日志_逼格高又实用的Linux高级命令,开发运维都要懂

在运维的坑里摸爬滚打好几年了&#xff0c;我还记得我刚开始的时候&#xff0c;我只会使用一些简单的命令&#xff0c;写脚本的时候&#xff0c;也是要多简单有多简单&#xff0c;所以有时候写出来的脚本又长又臭&#xff0c;像一些高级点的命令&#xff0c;比如说Xargs 命令、…

Android SimpleAdapter的参数

1.作用是ArrayList和 ListView的桥梁。这个ArrayList里边的每一项都是一个Map<String,?>类型。 ArrayList当中的每一项 Map对象都和ListView里边的每一项进行数据绑定一一对应。2.SimpleAdapter的构造函数&#xff1a;SimpleAdapter(Context context, List<? …

一个excel文档里复制黏贴另外表单跟着变动_利用Excel连接Power BI,实现PPT报告自动输出...

​文/HALI就职于汽车行业战略部门 专注汽车市场信息情报收集和分析因为工作需要&#xff0c;每月周期性的更新数据和撰写PPT 报告成为繁重的劳动。结果是很多时间花费在数据处理上&#xff0c;真正的分析工作&#xff0c;往往只能草草收场。不能坐以待毙&#xff0c;就要想想有…

出现23.97帧率的原因

http://raytao.lofter.com/post/3d177_185a386 关于那些“格&#xff08;Frame&#xff09;”不得不说的事 今天早上&#xff0c;鄙人在社交网络发了这一系列的问题&#xff1a;请解释以下名词之间的关系或差异。帧&#xff0c;格&#xff0c;帧率&#xff0c;时基&#xff0c;…

使用ajax将数据显示在指定位置_AJAX学习主题之一

学习主题&#xff1a;AJAX删除用户功能实现根据视频中的讲解&#xff0c;完成以下内容简述删除功能的基本思路流程点击按钮获取当前元素中的用户uid&#xff0c;向服务器发起请求&#xff0c;将uid提交到服务器删除指定用户&#xff0c;浏览器获取浏览器响应结果。独立完成删除…

js日期比较大小_node.js 内存泄漏的秘密

每日前端夜话第276篇翻译&#xff1a;疯狂的技术宅作者&#xff1a;Giovanny Gongora来源&#xff1a;nodesource正文共&#xff1a;3955 字预计阅读时间&#xff1a;10分钟一直以来&#xff0c;跟踪 Node.js 的内存泄漏是一个反复出现的话题&#xff0c;人们始终希望对其复杂性…

win7+vs2015/13+caffe+matlab+python(CPU only)配置

首先声明本教程可以适用于vs2015 和vs2013 .以vs2015为例。 安装必备软件 vs 2015 /vs2013 matlab 2016a(64bit)推荐使用Anaconda 2.7 或者Miniconda 2.7这两个Python发布版本cmake 3.8.0 以上caffe-window: https://github.com/BVLC/caffe/tree/windows 可选软件&#xff1…

Performance Co-Pilot

Install Performance Co-Pilot 提前安装依赖 [rootiZrj97j6t7ih9hgz1me35hZ ~]# cat install.sh yum install -y docker yum install -y git yum install -y yum-utils-1.1.31-40.el7.noarch yum install lex yum install flex yum install -y bison yum install -y perl-ExtUt…

如何发布打包并发布自己的Android应用(APP)

第一步&#xff0c;在Eclipse中选择需要打包的项目&#xff0c;然后右键--选择Export&#xff0c;会弹出一个打包的提示框&#xff0c;如下图所示。 按Next之后&#xff0c;会继续出现一个提示框&#xff0c;这里你可以选择自己需要打包的项目&#xff08;默认是刚才选中的&…

js变量提升_一道JS变量提升题

var a 0;if(true){a 1;function a(){};a 21;console.log(a);}console.log(a);// 21 1 当前上下文代码执行之前&#xff0c;会将带var/function的进行声明/定义。当遇到“{}”时&#xff0c;新版浏览器和老版浏览器的处理不一致。老版浏览器&#xff08;IE10以下&#xff09;…

Caffe训练过程:test_iter test_interval等概念

转载自http://blog.csdn.net/iamzhangzhuping/article/details/49993899 先上一张图&#xff0c;大家很熟悉的一张图。 首先说明一个概念&#xff1a;在caffe中的一次迭代iteration指的是一个batch&#xff0c;而不是一张图片。 下面主要说下2个概念&#xff1a; test_ite…

R的获取和安装

R的获取和安装 一、下载 R可以在CRAN&#xff08;Comprehensive r archive network&#xff09;http://cran.r-project.org上免费下载&#xff0c;可供选择的有Linux、Mac OS X和windows对应的二进制文件&#xff1b; 我这里选择的是windows版本。打开如下页面&#xff1a; bas…