HAOI 2006 受歡迎的牛 (洛谷2341)

2022-05-12 12:41:28 字數 1386 閱讀 8795

題目描述

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

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

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

輸入輸出格式

輸入格式:

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

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1: 複製

3 3

1 2

2 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的點即為答案。若有兩個或兩個以上出度為0的點則顯然沒有明星奶牛。

#include

#include

using

namespace

std;

const

int maxn = 10005;

struct edgeedge[maxn*5];

int n,m,head[maxn],low[maxn],dfn[maxn],d[maxn];

int cnt,num,ans,top,stack[maxn],col_num,col[maxn],sum[maxn];

bool vis[maxn];

inline

void add(int bg,int ed)

inline

void tarjan(int u)

else

if(vis[v])

low[u]=min(low[u],dfn[v]);

}if(low[u]==dfn[u])

sum[col_num]++;

top--;

}}int main()

for(register

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

if(!dfn[i]) tarjan(i);

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

}int tt=0;

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

else

tt=i;}}

printf("%d",sum[tt]);

return

0;}

HAOI 2006 受歡迎的牛 (洛谷2341)

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

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受歡迎。你的任務是求出有多...