時間限制: 1000 ms 記憶體限制: 65536 kb
提交數: 808 通過數: 428
【題目描述】
原題來自:usaco 2003 fall
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有 n 頭牛,給你 m 對整數 (a,b),表示牛 a 認為牛 b 受歡迎。這種關係是具有傳遞性的,如果 a 認為 b 受歡迎,b 認為 c 受歡迎,那麼牛 a 也認為牛 c 受歡迎。你的任務是求出有多少頭牛被除自己之外的所有牛認為是受歡迎的。
【輸入】
第一行兩個數 n,m;
接下來 m 行,每行兩個數 a,b,意思是 a 認為 b 是受歡迎的(給出的資訊有可能重複,即有可能出現多個 a,b)。
【輸出】
輸出被除自己之外的所有牛認為是受歡迎的牛的數量。
【輸入樣例】
3 31 2
2 12 3
【輸出樣例】
1【提示】
樣例說明
只有第三頭牛被除自己之外的所有牛認為是受歡迎的。
資料範圍:
對於全部資料,1≤n≤104,1≤m≤5×104。
思路:縮點,是否只有乙個出度為0的縮點集合。
#include
using
namespace std;
const
int n=
5e4+5;
int n,m,dfn[n]
,vis[n]
,low[n]
,t=0
,num=
0,b[n]
,cnt[n]
;int x[n]
,y[n]
,out[n]
;vector<
int> a[n]
;stack<
int> s;
void
dfs(
int x)
else
if(vis[y]
) low[x]
=min
(low[x]
,low[y]);
}if(low[x]
==dfn[x]
) b[x]
=num;
cnt[num]++;
vis[x]=0
; s.
pop();
}}intmain()
for(
int i=
1;i<=n;i++)if
(!dfn[i]
)dfs
(i);
for(
int i=
0;i)//新建圖,縮點
int res=
0,x=0;
for(
int i=
1;i<=num;i++)if
(res>1)
}printf
("%d\n"
,cnt[x]);
return0;
}
受歡迎的牛
題目大意 給你n個點,m條單項邊,求可以和所有點聯通的點的個數。注釋 n 10,000,m 50,000 想法 這題也是一道tarjan裸題,讓我來a掉吧!這題和愛在心中 愛在心中?猛戳 類似,只不過這題有坑.用panxf的模板a不掉這道題.為什麼呢?因為n的資料範圍,會mle。但是我們發現,這道題...
tarjan 受歡迎的牛
題 既然愛慕關係可以傳遞,那麼將互相可達的某幾個點縮成乙個點,就能簡化原圖了,那麼很自然想到tarjan求強連通分量 那麼就只需找到可以被所有縮點遍歷到的那個縮點 再輸出它所含的點數就行了 先用tarjan將所有聯通分量進行縮點,縮點後考慮出度為0的點的個數 1 個數大於1的時候,顯然不存在受歡迎的...
受歡迎的牛(tarjan)
題目連線 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第一行兩個數n,m。接下來m行,每行兩個數a,b,意思...