題意:
現在有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 個人玩狼人殺,只有村民和狼人,每個人指定另乙個人並指出乙個身份,其中 村民是不會說謊的,狼人是有可能說謊的,問在所有情況下必然是狼人的人數和必然是村民的人數分別有多少 首先所有人都有可能說謊,所以不可能有人必然是村民 接下來我們考慮是否有人必然是狼人,我們考...