2438 中山市選2011 殺人遊戲

2021-09-30 13:45:59 字數 1060 閱讀 8505

題目鏈結

題目大意:有n個人,其中乙個是殺手,可以詢問一些人,如果是殺手就會死,如果是平民,他會告訴你他認識的人中有誰是殺手有誰是平民,求自身安全並知道殺手的概率最大是多少

題解:某個人是殺手的概率相等。考慮到每個scc只問乙個點就可以,進行縮點,縮點後每個scc對答案貢獻等價。

知道誰是殺手相當於知道所有人的身份,需要在dag中選擇x個點,使得至少能夠遍歷n-1個點(確定n-1就可以確定全部),要求x最小,那麼顯然x取所有入度為0的點,答案即為(n

−x)÷

n 如果某個scc滿足入度為0的條件,但是其大小為1,且這個scc的所有出邊到達的點入度均大於1,那麼這個點就可以不選(即上文中的n-1情況),圖中只能有1個這樣的點

我的收穫:樸素算概率,討論

#include 

#include

#include

#include

#include

using

namespace

std;

#define m 100005

int tm,scnt,top;

int n,m,t,t2,ans;

int head[m],last[m];

int low[m],dfn[m],col[m],sz[m],in[m],s[m*5];

bool ins[m],mark[m];

struct edgee[m*5],p[m*5];

void add(int u,int v)

void insert(int u,int v)

void tarjan(int x)

}void rebuild()

for(int i=head[x];i!=-1;i=e[i].nex)

if(col[x]!=col[e[i].to]) mark[col[e[i].to]]=0;

}}bool check(int x)

void work()

cout

<6)<<1.0-(double)ans/nint main()

bzoj 2438 中山市選2011 殺人遊戲

一位冷血的殺手潛入 na wiat,並假裝成平民。警察希望能在 n 個人裡面,查出誰是殺手。警察能夠對每乙個人進行查證,假如查證的物件是平民,他會告訴警察,他認識的人,誰是殺手,誰是平民。假如查證的物件是殺手,殺手將會把警察乾掉。現在警察掌握了每乙個人認識誰。每乙個人都有可能是殺手,可看作他們是殺手...

bzoj2438 中山市選2011 殺人遊戲

感覺今天狀態起飛了!之前留的坑一調就a了,舒服!那麼這題之前一看就覺得,假如乙個人沒人認識實際上他必須查一下,那麼我第一次做的時候就把他抽象成了很多棵樹,然後我只查樹根,然後下面的每一層我都知道身份,那就沒有生命之憂了。然後特判一下有乙個人沒人認識tata也不認識別人,就是自己獨立出來的,那他最後留...

BZOJ 2438 中山市選2011 殺人遊戲

一位冷血的殺手潛入 na wiat,並假裝成平民。警察希望能在 n 個人裡面,查出誰是殺手。警察能夠對每乙個人 進行查證,假如查證的物件是平民,他會告訴警察,他認識的人,誰是殺手,誰是平民。假如查證的物件是殺 手,殺手將會把警察乾掉。現在警察掌握了每乙個人認識誰。每乙個人都有可能是殺手,可看作他們是...