HAOI2006 受歡迎的牛

2022-09-18 12:18:15 字數 2215 閱讀 5876

每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數(a,b),表示牛 a 認為牛 b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。

第1行兩個整數n,m;

接下來m行,每行兩個數a,b,意思是a認為b是受歡迎的(給出的資訊有可能重複,即有可能出現多個a,b)

乙個數,即有多少頭牛被所有的牛認為是受歡迎的。

3 3

1 2

2 1

2 3

1

10%的資料n<=20,m<=50

30%的資料n<=1000,m<=20000

70%的資料n<=5000,m<=50000

100%的資料n<=10000,m<=50000

haoi2006

圖論,連通性

本來寒假已經 ac 

過一次,結果

poj資料增強了,結果 

wa ,看不出**萎了,於是重新碼了一遍。

思路還是很清晰的:tarjan 

縮點成 

dag 

然後判斷是否只有乙個強連通分量出度為 

0 ,如果是,則輸出

size

,否則輸出 0 ;

證明:若強連通分量x

有出邊,則出邊所指向的點必不喜歡

x(若喜歡則與

x為同一強連通分量),則

x不是答案。存在兩個或以上的強連通分量沒有出邊,則他們互相不喜歡,所以沒有答案。

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include

9 #include 10 #include 11 #include 12 #include 13 #include 14

using

namespace

std;

15#define re register

16#define ll long long

17#define file(a) freopen(a".in","r",stdin); freopen(a".out","w",stdout);

1819 inline int

gi()

2023

while(c>='

0' && c<='

9')

24if(b) return -r; return

r;25}26

27const

int inf = 1e9+7, n = 1e4+7, m = 5e4+7;28

intn,m,num,f[n],dfn[n],low[n],cnt,siz[n],bl[n],hd[n],sum;

29bool

b[n];

30struct

node

31; node da[m],dd[m];

34 stack z;

3536 inline int min (int a, int

b)37

4041 inline void add (int fr, int

to)42

4546 inline void link (int fr, int

to)47

5051 inline void tarjan (int

o)52

63else

if (b[to]) low[o] =min (low[o], dfn[to]);64}

65if (dfn[o] ==low[o])

6673

while (to !=o);74}

75}7677

intmain ()

7886 num = 0;87

for (i=1; i<=n; i++) if(!dfn[i]) tarjan(i);

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

89for (j=f[i]; j; j=da[j].nx)

9094

for (i=1; i<=cnt; i++)

95106

}107

}108 printf ("

%d\n

",ans);

109return0;

110 }

view code

HAOI2006 受歡迎的牛

題目 分析 tarjan縮點。最後如果只有乙個出度為0的點,則答案就是這個點包含的牛數,否則為0.一開始最後統計的時候寫了dfs,後來發現是錯誤的,反例 include include include include include using namespace std const int tma...

HAOI2006 受歡迎的牛

這個就是強連通,計算出度為0的點就好 也沒森麼其它好講的啦 提交傳送們 description 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多...

HAOI2006 受歡迎的牛

haoi2006 受歡迎的牛 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛 a 認為牛 b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第1行兩個整數n,m 接下來...