每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數(a,b),表示牛 a 認為牛 b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。
第1行兩個整數n,m;
接下來m行,每行兩個數a,b,意思是a認為b是受歡迎的(給出的資訊有可能重複,即有可能出現多個a,b)
乙個數,即有多少頭牛被所有的牛認為是受歡迎的。
3 3
1 2
2 1
2 3
1
10%的資料n<=20,m<=50
30%的資料n<=1000,m<=20000
70%的資料n<=5000,m<=50000
100%的資料n<=10000,m<=50000
haoi2006
圖論,連通性
本來寒假已經 ac
過一次,結果
poj資料增強了,結果
wa ,看不出**萎了,於是重新碼了一遍。
思路還是很清晰的:tarjan
縮點成
dag
然後判斷是否只有乙個強連通分量出度為
0 ,如果是,則輸出
size
,否則輸出 0 ;
證明:若強連通分量x
有出邊,則出邊所指向的點必不喜歡
x(若喜歡則與
x為同一強連通分量),則
x不是答案。存在兩個或以上的強連通分量沒有出邊,則他們互相不喜歡,所以沒有答案。
1 #include 2 #includeview code3 #include 4 #include 5 #include 6 #include 7 #include 8 #include
9 #include 10 #include 11 #include 12 #include 13 #include 14
using
namespace
std;
15#define re register
16#define ll long long
17#define file(a) freopen(a".in","r",stdin); freopen(a".out","w",stdout);
1819 inline int
gi()
2023
while(c>='
0' && c<='
9')
24if(b) return -r; return
r;25}26
27const
int inf = 1e9+7, n = 1e4+7, m = 5e4+7;28
intn,m,num,f[n],dfn[n],low[n],cnt,siz[n],bl[n],hd[n],sum;
29bool
b[n];
30struct
node
31; node da[m],dd[m];
34 stack z;
3536 inline int min (int a, int
b)37
4041 inline void add (int fr, int
to)42
4546 inline void link (int fr, int
to)47
5051 inline void tarjan (int
o)52
63else
if (b[to]) low[o] =min (low[o], dfn[to]);64}
65if (dfn[o] ==low[o])
6673
while (to !=o);74}
75}7677
intmain ()
7886 num = 0;87
for (i=1; i<=n; i++) if(!dfn[i]) tarjan(i);
88for (i=1; i<=n; i++)
89for (j=f[i]; j; j=da[j].nx)
9094
for (i=1; i<=cnt; i++)
95106
}107
}108 printf ("
%d\n
",ans);
109return0;
110 }
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受歡迎。你的任務是求出有多...
HAOI2006 受歡迎的牛
haoi2006 受歡迎的牛 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛 a 認為牛 b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第1行兩個整數n,m 接下來...