Tarjan 洛谷 P2341 受歡迎的牛

2022-07-24 05:45:17 字數 988 閱讀 9899

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

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

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

輸入格式:

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

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

輸出格式:

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

輸入樣例#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

1 #include 2 #include 3 #include 4 #include 5

#define n 10050

6using

namespace

std;

7struct edgee[n*20];8

int head[20*n],dfn[n],low[n],du[n],p[n],tot[n],cnt,num,n,m,k,o;

9bool

bel[n];

10 stackq;

11void insert(int x,int y)

12void tarjan(int

x)13

25while (x!=k);26}

27}28int

main()

2938 o=i;39}

40 printf("%d"

,tot[o]);

41 }

Tarjan縮點 洛谷P2341

傳送門 這題很簡單,不知道為什麼是提高組的題.主要思路就是先tarjan縮點,然後在dag上找出度為0的點,如果只有乙個出度為0的點,那麼這個點就是的大小就是受歡迎的牛的數目。如果有兩個及以上個點的出度為0,那麼不存在明星牛。下面是 include using namespace std const...

洛谷 P2341 受歡迎的牛(tarjan縮點)

題目鏈結 思路 因為n是1e4,所以floyd求傳遞閉包肯定是不行的,二維陣列都開不了這麼大,複雜度也不對,然後就學了下tarjan縮點,因為每個強連通分量裡的每個牛肯定是互相喜歡的,所以我們要找強連通分量出度為0的那一團。1.只找到一團出度為0的強連通分量,答案就是那一團的大小。2.找到0或多團強...

洛谷P2341 受歡迎的牛 Tarjan縮點

題意 a喜歡b,b喜歡c,那麼a就喜歡c,每個人都必定喜歡自己,求問被所有人喜歡的人有多少個 輸入格式 n,m分別是人總數和喜歡關係的數目,接下來m行每行兩個數字a,b代表a喜歡b 直接套tarjan演算法縮點模板,記錄數目並最後記錄每個點出度即可即可。include define maxn 100...