P2341 受歡迎的牛

2021-09-25 06:45:30 字數 1614 閱讀 2718

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

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

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

第一行:兩個用空格分開的整數:n和m

第二行到第m + 1行:每行兩個用空格分開的整數:a和b,表示a喜歡b

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

331

2212

3

1
1.縮點後,若只有乙個出度為0的點,那麼明星牛的個數即那個強連通分量包含的點的個數;

2.縮點後,若有多個出度為0的點或無出度為0的點,那麼明星牛的個數即為0。

#include

#define m(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define mod 19650827

using

namespace std;

inline

void

read

(int

&x)while

(ch>=

'0'&& ch<=

'9')

if(c==

'-')x=

-x;}

int n,m,ans[

10005

],sum[

10005];

int head[

10005

],tot;

bool in[

10005];

int dfn[

10005

],low[

10005

],indx;

int stack1[

10005

],top;

int belong[

10005

],cnt;

struct nodeedge[

50005];

void

add(

int x,

int y)

void

tarjan

(int s)

else

if(in[v]

&&low[s]

>dfn[v]

)low[s]

=dfn[v];}

if(dfn[s]

==low[s]

)while

(p!=s);}

}int

main()

for(

int i=

1;i<=n;i++)if

(!dfn[i]

)tarjan

(i);

for(

int i=

1;i<=n;i++

)int p=0;

for(

int i=

1;i<=cnt;i++

) p=i;}}

printf

("%d"

,ans[p]);

return0;

}

P2341 受歡迎的牛

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

P2341 受歡迎的牛

這是一道不是很好想的tarjan模版題 有一點小改動 但是要是沉下心好好思考,是可以發現其中的規律的。主體部分還是跑tarjan,就是要維護乙個am來記錄這個顏色的強連通分量裡元素的數量,並且不要忘記把u從棧裡刪掉的時候也要修改am 真難發現啊 另外要明白,最受歡迎的牛一定就是那個出度為0的那個強連...

洛谷 P2341 受歡迎的牛

畫一張圖形象一下 tarjan演算法模板,這裡用於縮點 1931 else if col k 3235 36 if low u dfn u 3746 pru.pop 47 48return 49 50signed main 5158 for register int i 1 i n i 5964 6...