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