HDU6370(思維 搜尋

2021-08-24 18:17:11 字數 1236 閱讀 8412

題意:

現在有n個人,每個人要麼是第一類:說的全是真話;要麼是第二類:說的可能是假話。

每乙個人x都指認另乙個人y是第一類或第二類人。

請問在所有合法的情況下,有多少人必定是第一類人、有多少人必定是第二類人?

思路:(首先題解送上

當然其實沒怎麼懂。。我也不是這麼寫的

主要點:

然後再xjb補充一下吧,以防以後看不懂(反正都是別的部落格上截來的

反正我的寫法就是找出所有的環,判斷這個環中是不是只有一條狼邊,如果只有一條狼邊,那麼將這條狼邊指向的那個點賦為鐵狼,如果大於1那麼這個環上所有點都可能是村民。最後再dfs一遍判斷環外的點

最後**(三個dfs可以說是十分醜陋了。。。

#include#include#include#include#include#includeusing namespace std;

int to[100000+10],v[100000+10],ans[100000+10],f,num,p,vis[100000+10];

void dfs(int rt,int pos)//找環

else

}void dfs(int rt,int ed)//記錄環的狼邊數,並記錄指向結點

if(to[rt]==ed)return;

dfs(to[rt],ed);

}void dfs(int rt)//判斷環外的其他點

else ans[rt]=1;

}int main()

int tot=1;

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

for(int i=1;i<=n;i++)//判斷環外的其他點

int sum=0;

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

printf("0 %d\n", sum);

}return 0;}/*

1062 w3 v

4 w5 v

6 v2 v

*/

HDU 6370 狼人殺(並查集)

題目描述 有n個人在玩狼人殺,每個人有兩種身份,狼或者村民,村民必須要將真話,而狼可能講假話。現在每個人都會說出乙個除了自己外的乙個人身份,現在問你有多少個人確定是村民,有多少個人確定是狼人。題目分析 因為題目不排斥所有玩家都是狼人的情況 這一點都不符合遊戲規則好吧 因此題目中所有的人說的所有的話均...

hdu6370 werewolf 縮點 搜尋

把圖畫一畫可以發現只能判斷鐵狼,沒有確定的村民,鐵狼會存在於乙個環中,這個環裡面如果只有乙個人被認為是狼,那麼他就是鐵狼,可以很容易看出這是乙個基環內向樹的樣子,所以就會發現,如果還有人說這個鐵狼是村民的話,那說這個狼是村民的人就是狼。於是就可以想到有些環是沒有用的環,如果有乙個環上的邊都是村民邊,...

HDU6370 Werewolf 基環內向樹

hdu6370 werewolf 有 n 個人玩狼人殺,只有村民和狼人,每個人指定另乙個人並指出乙個身份,其中 村民是不會說謊的,狼人是有可能說謊的,問在所有情況下必然是狼人的人數和必然是村民的人數分別有多少 首先所有人都有可能說謊,所以不可能有人必然是村民 接下來我們考慮是否有人必然是狼人,我們考...