P2341 HAOI2006 受歡迎的牛 題解

2022-06-01 21:00:09 字數 1648 閱讀 4853

每頭奶牛都夢想成為牛棚裡的明星。被所有奶牛喜歡的奶牛就是一頭明星奶牛。所有奶

歡b,b喜歡c,那麼a也喜歡c。牛欄裡共有n 頭奶牛,給定一些奶牛之間的愛慕關係,請你

算出有多少頭奶牛可以當明星。

輸入格式:

輸出格式:

第一行:單獨乙個整數,表示明星奶牛的數量

輸入樣例#1:

3 3

1 22 1

2 3

輸出樣例#1:

1
只有 3 號奶牛可以做明星

【資料範圍】

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

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

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

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

題解

由題可得,受歡迎的奶牛只有可能是圖中唯一的出度為零的強連通分量中的所有奶牛,所以若出現兩個以上出度為0的強連通分量則不存在明星奶牛,因為那幾個出度為零的分量的愛慕無法傳遞出去。那唯一的分量能受到其他分量的愛慕同時在分量內相互傳遞,所以該分量中的所有奶牛都是明星。

參考**

1 #include2

#pragma comment(linker, "/stack:102400000,102400000") //

手動擴棧跑的快~~

3#define n 10050

4using

namespace

std;

5struct

edge

6edge[n*20];9

int head[20*n],dfn[n],low[n];

10int

du[n],id[n],all[n];

11bool

insta[n];

12int

cnt,tot,gg,n,m;

13 stacks;

14void add(int x,int

y)15

21void

in(int &read)

2231

while(ch>='

0'&&ch<='9'

)3236 read=x*f;37}

38void tarjan(int x)//

targan模版

3950

else

if(insta[u])low[x]=min(low[x],dfn[u]);51}

52int

k;53

if(low[x]==dfn[x])

5462}63

}64intmain()

6575

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

7680

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

8189}90

}91int tt=0;92

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

93101 tt=i;

102}

103}

104 printf("%d"

,all[tt]);

105return0;

106 }

view code

P2341 HAOI2006 受歡迎的牛

p2341 haoi2006 受歡迎的牛 塔爾羊標準模板 我才不會告訴你我嘴裡含著乙個九省聯考的出題人 不會劈配 林克卡特樹 制胡竄 我還會叉糞宿主,梳妝素組,西安段素 include include include includeusing namespace std vectorline 500...

洛谷 P2341 HAOI2006 受歡迎的牛

a 喜歡 b,b 喜歡 c,那麼 a 也喜歡 c。牛欄裡共有 n 頭奶牛,給定一些奶牛之間的愛慕關係,請你算出有多少頭奶牛可以當明星。輸入格式 第一行 兩個用空格分開的整數 n和 m 第二行到第 m 1行 每行兩個用空格分開的整數 a 和 b,表示 a 喜歡 b 輸出格式 第一行 單獨乙個整數,表示...

洛谷P2341 HAOI2006 受歡迎的牛

每頭奶牛都夢想成為牛棚裡的明星。被所有奶牛喜歡的奶牛就是一頭明星奶牛。所有奶 歡b,b喜歡c,那麼a也喜歡c。牛欄裡共有n 頭奶牛,給定一些奶牛之間的愛慕關係,請你 算出有多少頭奶牛可以當明星。輸入格式 第一行 兩個用空格分開的整數 n和m 第二行到第m 1行 每行兩個用空格分開的整數 a和b,表示...