【強連通分量+概率】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.pswp.cn/news/258802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258802.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

serialversionuid的作用_為什么阿里Java規約要求謹慎修改serialVersionUID字段

serialVersionUID簡要介紹serialVersionUID是在Java序列化、反序列化對象時起作用的一個字段。Java的序列化機制是通過判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時&#xff0c;JVM會把傳來的字節流中的serialVersionUID與本地相應實體類的serialVersionUID進…

fatal error LNK1169: 找到一個或多個多重定義的符號 的解決方案

昨天&#xff0c;嘗試一個項目&#xff0c;遇到了如下的問題。先來還原一下&#xff1a; 頭文件test.h #pragma once #include <Eigen/Core> #include <iostream>using namespace Eigen; using namespace std;class point2 { public: point2(int x1,int y1):x(x…

常用工具說明--搭建基于rietveld的CodeReview平臺(未測試)

為什么要codereview . 整個團隊的編碼風格是統一的。 . 有高手能對自己的代碼指點一二&#xff0c;從而提高編碼水平。 . 減少低級錯誤的出現 . 約束自己寫高質量的代碼&#xff0c;因為是要給人看的。 我們對codereview的需求 . 很輕松可以發布自己寫的代碼。 . 很輕松的可以與…

輸入的優化

讀入整型時&#xff0c;輸入優化可以節省不少時間 1 typedef type long long 2 // 這里以long long為例 3 type read() { 4 type x0; int f1; 5 char chgetchar(); 6 while(ch<0||ch>9) {if(ch-) f-1; chgetchar();} 7 while(ch>0&&ch<9) …

python股票分析系統_熬了一晚上,小白用Python寫了一個股票提醒系統

碼農小馬七夕節去相親了&#xff0c;見了一個不錯的姑娘&#xff0c;長的非常甜美&#xff01;聊著聊著很投緣&#xff01;通過介紹人了解到&#xff0c;對方也很滿意&#xff5e;&#xff5e;想著自己單身多年的生活就要結束啦&#xff0c;心里滿是歡喜&#xff0c;美美噠&…

有關eigen庫的一些基本使用方法

目錄 介紹安裝Demo矩陣、向量初始化C數組和矩陣轉換矩陣基礎操作點積和叉積轉置、伴隨、行列式、逆矩陣計算特征值和特征向量解線性方程最小二乘求解稀疏矩陣介紹 Eigen是一個輕量級的矩陣庫,除了稀疏矩陣不成熟&#xff08;3.1有較大改進&#xff09;以外,其他的矩陣和向量操作…

匯編程序:將字符串中所有大寫字符轉為小寫

【任務】 編寫程序&#xff0c;將數據區中定義的以0作為結束符的一個字符串中所有的大寫字符&#xff0c;全部轉換為小寫。 【參考解答】 assume cs:cseg, ds:dseg, ss:sseg sseg segment stackdw 100h dup (?) sseg ends dseg segmentdb YanTai123University, 0 d…

從零開始編寫自己的C#框架(1)——前言

記得十五年前自學編程時&#xff0c;拿著C語言厚厚的書&#xff0c;想要上機都不知道要用什么編譯器來執行書中的例子。十二年前在大學自學ASP時&#xff0c;由于身邊沒有一位同學和朋友學習這種語言&#xff0c;也只能整天混在圖收館里拼命的啃書。而再后來也差不多&#xff0…

Bash內置命令

Bash有很多內置命令&#xff0c;因為這些命令是內置的&#xff0c;因此bash不需要在磁盤上為它們定位&#xff0c;執行速度更快。 1&#xff09;列出所有內置命令列表$enable 2&#xff09;關閉內置命令test$enable -n test 3&#xff09;打開內置命令test$enable test 4&…

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…

Java與C語言比較(Java參考書中摘錄)

C語言為面向過程的編程語言&#xff0c;Java為面向對象的編程語言。 在面向過程的編程語言(如C語言)中&#xff0c;編程一般面向操作&#xff0c;編程單位是函數(在Java中函數稱為方法)。 在Java中&#xff0c;編程單位是類。最終實例化(即創建)這些類而得到對象&#xff0c;屬…

Android調試技巧之Eclipse行號和Logcat

很多初入Android的開發者可能會發現經常遇到Force Close或ANR這樣的問題&#xff0c;一般我們通過Android系統的錯誤日志打印工具Logcat可以看到出錯的內容&#xff0c;今天一起來說下如何通過 Eclipse行號和Logcat捕捉出錯點&#xff0c;我們遇到錯誤可以首先在Eclipse的DDMS中…

第六章 產權市場

《市場經濟概論》&#xff08;6&#xff09;產權市場一 第六章 產權市場 產權是指人們對于某種資產所擁有的所有權、占有權、支配權、使用權。產權市場是指人們對于某種資產所擁有的所有權、占有權、支配權、使用權進行有償轉讓的場所領域及其有關各方面相互關系的總和。在過去…

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…

Generate Parentheses

題目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()" 方法…

ReportViewer 2010 打印預覽,用鼠標快速切換顯示比例時報錯:存儲空間不足,不能處理此命令...

CreateCompatibleDIB 存儲空間不足 無法處理此命令 安裝 ReportViewer 2010 sp1 即可。轉載于:https://www.cnblogs.com/runliuv/p/3640856.html

貪心/二分查找 BestCoder Round #43 1002 pog loves szh II

題目傳送門 1 /*2 貪心/二分查找&#xff1a;首先對ai%p&#xff0c;然后sort&#xff0c;這樣的話就有序能使用二分查找。貪心的思想是每次找到一個aj使得和為p-1(如果有的話)3 當然有可能兩個數和超過p&#xff0c;那么an的值最優&#xff0c;每次還要和…

nohup命令輸出日志_逼格高又實用的Linux高級命令,開發運維都要懂

在運維的坑里摸爬滾打好幾年了&#xff0c;我還記得我剛開始的時候&#xff0c;我只會使用一些簡單的命令&#xff0c;寫腳本的時候&#xff0c;也是要多簡單有多簡單&#xff0c;所以有時候寫出來的腳本又長又臭&#xff0c;像一些高級點的命令&#xff0c;比如說Xargs 命令、…