tarjan應用(受歡迎的牛 G 洛谷)

2021-10-07 04:36:00 字數 1432 閱讀 8764

輸入格式

第一行:兩個用空格分開的整數:nn 和 mm。

接下來 mm 行:每行兩個用空格分開的整數:aa 和 bb,表示 aa 喜歡 bb。

輸出格式

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

輸入輸出樣例

輸入 #1複製

3 31 2

2 12 3

輸出 #1複製

1說明/提示

只有 33 號奶牛可以做明星。

首先,不難發現,如果這所有的牛都存在同乙個強聯通分量裡。那麼它們一定互相受歡迎。

那麼,我們怎麼來找明星呢。

很簡單,找出度為00的強聯通分量中的點。這樣可以保證所有的人都喜歡它,但是它不喜歡任何人,所以說不存在還有人事明星。

此題還有乙個特殊情況:

如果有兩個點分別滿足出度為零的條件,則沒有明星,這樣無法滿足所有的牛喜歡他。

#include

#include

#include

using

namespace std;

#define n 10005

#define m 50005

int n,m,cnt=

1,head[n]

,dfn[n]

,book[n]

,low[n]

,num,belong[n]

,de[n]

,numm[n]

;struct e

;e edge[m]

;void

add(

int s,

int v)

int t=0;

stack <

int> zhan;

void

tarjan

(int x)

else

if(book[edge[i]

.to]==1

)}if(dfn[x]

== low[x])}

return;}

intmain()

for(

int i=

1;i<=n;i++

)for

(int i=

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

}int rec;

int flag=0;

for(

int i=

1;i<=num;i++)}

if(flag>1)

printf

("0\n");

//出現一次以上出度為零的連通分量

else

printf

("%d\n"

,numm[rec]);

return0;

}/*6 8

1 31 2

3 42 4

4 13 5

4 65 6

*/

tarjan 受歡迎的牛

題 既然愛慕關係可以傳遞,那麼將互相可達的某幾個點縮成乙個點,就能簡化原圖了,那麼很自然想到tarjan求強連通分量 那麼就只需找到可以被所有縮點遍歷到的那個縮點 再輸出它所含的點數就行了 先用tarjan將所有聯通分量進行縮點,縮點後考慮出度為0的點的個數 1 個數大於1的時候,顯然不存在受歡迎的...

受歡迎的牛(tarjan)

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

受歡迎的牛 Tarjan

每一頭牛的願望就是變成一頭最受歡迎的牛。現在有 頭牛,給你 對整數 表示牛 認為牛 受歡迎。這種關係是具有傳遞性的,如果 認為 受歡迎,認為 受歡迎,那麼牛 也認為牛 受歡迎。你的任務是求出有多少頭牛被除自己之外的所有牛認為是受歡迎的。輸入格式 第一行兩個數 接下來 行,每行兩個數 意思是 認為 是...