description
原題來自:usaco 2003 fall
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有 n 頭牛,給你 m 對整數 (a,b),表示牛 a 認為牛 b 受歡迎。這種關係是具有傳遞性的,如果 a 認為 b 受歡迎,b 認為 c 受歡迎,那麼牛 a 也認為牛 c 受歡迎。你的任務是求出有多少頭牛被除自己之外的所有牛認為是受歡迎的。
input
第一行兩個數 n,m;
接下來 m 行,每行兩個數 a,b,意思是 a 認為 b 是受歡迎的(給出的資訊有可能重複,即有可能出現多個 a,b)。
output
輸出被除自己之外的所有牛認為是受歡迎的牛的數量。
sample input 1
3 31 2
2 12 3
sample output 1
hint
樣例說明
只有第三頭牛被除自己之外的所有牛認為是受歡迎的。
資料範圍:
對於全部資料,1≤n≤10,000;1≤m≤50,000
題目大意:
找出被除自己以外所有牛歡迎的牛,典型的強連通分量,找出所有的強連通分量,然後進行壓點,如果想滿足題目要求,就必須讓所有點**度為0的點有且僅有乙個。
#include
using namespace std;
const
int maxn =
1e4+5;
int low[maxn]
,instack[maxn]
,dfn[maxn]
;int stack[maxn]
,in[maxn]
,t[maxn]
,tt[maxn]
;int tot,num,cnt;
int n,m;
struct node};
vectore[maxn]
;void
add_edge
(int u ,
int v)
void
tarjan
(int u)
else
if(instack[v])}
if(dfn[u]
== low[u]
) t[stack[num]
]= cnt;
tt[cnt]++;
instack[stack[num]]=
0;num--
; cnt++;}
}int
main()
for(
int i =
1; i <= n ; i++
)int sum =0;
for(
int i =
1; i <= n ; i++)}
int flag =0;
for(
int i =
0; i < cnt ; i++)}
if(flag ==1)
cout << sum << endl;
else
cout <<
"0"<< endl;
return0;
}
HAOI2006 受歡迎的牛 強連通分量
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有 n 頭牛,給你 m 對整數 a,b 表示牛 a 認為牛 b 受歡迎。這種關係是具有傳遞性的,如果 a 認為 b 受歡迎,b 認為 c 受歡迎,那麼牛 a 也認為牛 c 受歡迎。你的任務是求出有多少頭牛被除自己之外的所有牛認為是受歡迎的。loj 1009...
點連通分量 邊連通分量 割點和橋 強連通分量
老是搞不清他們的關係,不知道該用那份 今天理了一下,整理一下模板 點連通分量 可以求出點連通分量包含哪些點,那個點屬於那個連通分量 struct edge int pre maxn iscut maxn bccno maxn dfs clock,bcc cnt vectorg maxn bcc ma...
bzoj1501受歡迎的牛(強聯通分量 縮點)
首先,如果是乙個有向無環圖,那麼答案就是沒有出度的那個點,並且如果有多個沒有出度的點,那麼也不會出現乙個點能被所有點 歡迎 如果不是這樣乙個圖,那麼縮點就好。記錄一下每個縮的點的size,每個點屬於的聯通分量就好,注意一下沒有答案的情況就好 include include include inclu...