我考試想的正解,但是......有疏漏:
1.鄰接表的陣列又開小了
2.概率計算錯誤
正解就是tarjen+亂搞
1.這個圖可能是分片的圖,不一定是連通圖
2.對於其中的環進行縮點,然後在新建的圖上找indegree為0的點的數量sum,就是我們需要調查的人(稱之為張一帆)
3.其中我們定義有 這樣的張一帆,它可到的點的indegree都大於1 or 沒有它可到的點 為自閉症張一帆
那麼如果一共有n-1個張一帆,1個自閉症張一帆,我們只需要調查n-1個張一帆
不需要調查1個自閉症張一帆,因為n-1個張一帆不是,那麼自閉症張一帆一定是殺手
(ps:考試時腦子不太好使.....
概率計算應該是同時計算,沒有先後關係...)
1 #include2 #include3 #include4 #include5 #include6 #include7code#define dd double
8#define mem(a,b) memset(a,b,sizeof(a))
9using
namespace
std;
10const
int n=100500;11
int minn(int a,int b)
12bool ok(int a,int b)
13int
read()
1418
return
ans;19}
20struct
son21
;24 son a1[n<<2],ayuan[n<<2
];25
int first[n<<2],firstyuan[n<<2
],e,eyuan;
26void add(int u,int
v)27
32void addyuan(int u,int
v)33
3839
intdfn[n],low[n],vis[n],now;
40int
dui[n],sum,size[n];
41int zhan[n<<3
],he;
42void tan(int
x)43
56else
57if
(vis[temp])
58 low[x]=minn(low[x],dfn[temp]);59}
60if(dfn[x]==low[x])
6172}73
}7475int
n,m;
76int
u,o,p,hh;
77int
ind[n],zhen[n];
78int
judge[n];
79bool
flag[n];
80//
好像只需找出真點
81void dfs(int x,int
fa)82
9091 dd mi(dd a,int
c)92
101return
ans;
102}
103104
/*void out11()
105*/
111112
intmain()
126for(int i=1;i<=n;++i)
127if(dfn[i]==-1
)128
tan(i);
129//
cout<<0;
130131
for(int i=1;i<=n;++i)
132144
}145
146 hh=0
;147
148for(int i=1;i<=sum;++i)
149if(judge[i]==-1
)150
154 sort(zhen+1,zhen+1+sum,ok);
155if(zhen[hh]==1)--hh;
156157
//cout<158 printf("
%.6lf
",1-hh*1.0/(dd)n);
159//
while(1);
160return0;
161}
162
中山市選2011 殺人遊戲
一位冷血的殺手潛入na wiat 並假裝成平民。警察希望能在n個人裡面查出誰是殺手 警察能夠對每乙個人進行查證,假如查證的物件是平民,他會告訴警察,他認識的人,誰是殺手,誰是平民 假如查證的物件是殺手,殺手將會把警察乾掉 現在警察掌握了每一乙個人認識誰。每一乙個人都有可能是殺手,看作他們是殺手的概率...
中山市選2011 殺人遊戲
online judge bzoj 2438,luogu 4819 label tarjan縮點,概率,yy 一位冷血的殺手潛入 na wiat,並假裝成平民。警察希望能在 n 個人裡面,查出誰是殺手。警察能夠對每乙個人 進行查證,假如查證的物件是平民,他會告訴警察,他認識的人,誰是殺手,誰是平民。...
2438 中山市選2011 殺人遊戲
題目鏈結 題目大意 有n個人,其中乙個是殺手,可以詢問一些人,如果是殺手就會死,如果是平民,他會告訴你他認識的人中有誰是殺手有誰是平民,求自身安全並知道殺手的概率最大是多少 題解 某個人是殺手的概率相等。考慮到每個scc只問乙個點就可以,進行縮點,縮點後每個scc對答案貢獻等價。知道誰是殺手相當於知...