一位冷血的殺手潛入 na-wiat,並假裝成平民。警察希望能在 n 個人裡面,查出誰是殺手。警察能夠對每乙個人進行查證,假如查證的物件是平民,他會告訴警察,他認識的人, 誰是殺手, 誰是平民。 假如查證的物件是殺手,殺手將會把警察乾掉。現在警察掌握了每乙個人認識誰。每乙個人都有可能是殺手,可看作他們是殺手的概率是相同的。問:根據最優的情況,保證警察自身安全並知道誰是殺手的概率最大是多少?這道題是一道強聯通,是一道比較好的題目,與經典的題目有一點的小改動。首先,設gr為最少查證的人數,那麼概率就為(n-gr)/n。之後,這題有個特殊情況,如果有乙個點,它的入度為0,並自為乙個聯通分量,並與它相連的點都可以可以被其他給覆蓋的話,那麼它就無用,gr-1。
#include
#include
#include
#include
#include
using
namespace
std;
struct node
a[310000];int len,last[310000];
void ins(int x,int y)
int id,cnt,top;
int low[110000],dfn[110000],sta[110000],belong[110000],s[110000],ss[110000];
int ru[110000];
bool v[110000];
void dfs(int x)
else
}if(low[x]==dfn[x])
while(i!=x);
}}
bool he(int x)
return
true;
}int main()
id=cnt=top=0;
memset(dfn,-1,sizeof(dfn));
memset(low,0,sizeof(low));
memset(belong,0,sizeof(belong));
memset(sta,0,sizeof(sta));
memset(v,false,sizeof(v));
for(int i=1;i<=n;i++)
for(int i=1;i<=len;i++)
}int gr=0;
for(int i=1;i<=cnt;i++)
for(int i=1;i<=cnt;i++)
}printf("%.6lf\n",(n-gr)*1.0/n*1.0);
return
0;}
bzoj2438 中山市選2011 殺人遊戲
感覺今天狀態起飛了!之前留的坑一調就a了,舒服!那麼這題之前一看就覺得,假如乙個人沒人認識實際上他必須查一下,那麼我第一次做的時候就把他抽象成了很多棵樹,然後我只查樹根,然後下面的每一層我都知道身份,那就沒有生命之憂了。然後特判一下有乙個人沒人認識tata也不認識別人,就是自己獨立出來的,那他最後留...
BZOJ 2438 中山市選2011 殺人遊戲
一位冷血的殺手潛入 na wiat,並假裝成平民。警察希望能在 n 個人裡面,查出誰是殺手。警察能夠對每乙個人 進行查證,假如查證的物件是平民,他會告訴警察,他認識的人,誰是殺手,誰是平民。假如查證的物件是殺 手,殺手將會把警察乾掉。現在警察掌握了每乙個人認識誰。每乙個人都有可能是殺手,可看作他們是...
2438 中山市選2011 殺人遊戲
題目鏈結 題目大意 有n個人,其中乙個是殺手,可以詢問一些人,如果是殺手就會死,如果是平民,他會告訴你他認識的人中有誰是殺手有誰是平民,求自身安全並知道殺手的概率最大是多少 題解 某個人是殺手的概率相等。考慮到每個scc只問乙個點就可以,進行縮點,縮點後每個scc對答案貢獻等價。知道誰是殺手相當於知...