bzoj 2438 殺人遊戲(tarjan縮點)

2021-08-28 17:26:38 字數 1156 閱讀 7967

根據題意只要找出有多少個不連通的集合就可以了。。但是在判定的時候有環的話會有點麻煩,所以先縮點,在dfs。

但是如果有乙個點它的所有連的點不止它乙個入度的話 ,而且這個點的入度為0,那麼最後剩它的時候就不用問了。

#include#include#include#includeusing namespace std;

struct node

edge[300005],edge1[300005];

int head[100005],head1[100005];

int cnt=1,ans,cot=1,gs[100005];

void init()

void add(int from,int to)

void added(int from,int to)

int dfn[100005];

int low[100005];

int srcnt;

int pos[100005];

int srans[100005];

int deep=0;

int top;

int stackk[100005];

int used[100005];

int out[100005],outt[100005];

void tarjan(int rt)

else if(pos[to] == 0)

} if(low[rt] == dfn[rt])

srans[srcnt] = t; }}

void dfs(int u,int ttt)

}int main()

for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)}}

for(int i=1;i<=srcnt;i++)

for(int i=1;i<=srcnt;i++)

gs[used[i]]++;

}int flag=0;

for(int i=1;i<=n;i++)

}if(!flag)

else}}

double tt=(double)(n-ans)/(double)n;

printf("%.6lf",tt);

return 0;

}

bzoj2438 殺人遊戲

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

bzoj 2438 中山市選2011 殺人遊戲

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

bzoj2438 中山市選2011 殺人遊戲

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