每頭奶牛都夢想成為牛棚裡的明星。被所有奶牛喜歡的奶牛就是一頭明星奶牛。所有奶
歡b,b喜歡c,那麼a也喜歡c。牛欄裡共有n 頭奶牛,給定一些奶牛之間的愛慕關係,請你
算出有多少頭奶牛可以當明星。
輸入格式:
輸出格式:
第一行:單獨乙個整數,表示明星奶牛的數量
輸入樣例#1:
3 3輸出樣例#1:1 22 1
2 3
1只有 3 號奶牛可以做明星
【資料範圍】
10%的資料n<=20, m<=50
30%的資料n<=1000,m<=20000
70%的資料n<=5000,m<=50000
100%的資料n<=10000,m<=50000
題解
由題可得,受歡迎的奶牛只有可能是圖中唯一的出度為零的強連通分量中的所有奶牛,所以若出現兩個以上出度為0的強連通分量則不存在明星奶牛,因為那幾個出度為零的分量的愛慕無法傳遞出去。那唯一的分量能受到其他分量的愛慕同時在分量內相互傳遞,所以該分量中的所有奶牛都是明星。
參考**
1 #include2view code#pragma comment(linker, "/stack:102400000,102400000") //
手動擴棧跑的快~~
3#define n 10050
4using
namespace
std;
5struct
edge
6edge[n*20];9
int head[20*n],dfn[n],low[n];
10int
du[n],id[n],all[n];
11bool
insta[n];
12int
cnt,tot,gg,n,m;
13 stacks;
14void add(int x,int
y)15
21void
in(int &read)
2231
while(ch>='
0'&&ch<='9'
)3236 read=x*f;37}
38void tarjan(int x)//
targan模版
3950
else
if(insta[u])low[x]=min(low[x],dfn[u]);51}
52int
k;53
if(low[x]==dfn[x])
5462}63
}64intmain()
6575
for(int i=1;i<=n;i++)
7680
for(int w=1;w<=n;w++)
8189}90
}91int tt=0;92
for(int i=1;i<=gg;i++)
93101 tt=i;
102}
103}
104 printf("%d"
,all[tt]);
105return0;
106 }
P2341 HAOI2006 受歡迎的牛
p2341 haoi2006 受歡迎的牛 塔爾羊標準模板 我才不會告訴你我嘴裡含著乙個九省聯考的出題人 不會劈配 林克卡特樹 制胡竄 我還會叉糞宿主,梳妝素組,西安段素 include include include includeusing namespace std vectorline 500...
洛谷 P2341 HAOI2006 受歡迎的牛
a 喜歡 b,b 喜歡 c,那麼 a 也喜歡 c。牛欄裡共有 n 頭奶牛,給定一些奶牛之間的愛慕關係,請你算出有多少頭奶牛可以當明星。輸入格式 第一行 兩個用空格分開的整數 n和 m 第二行到第 m 1行 每行兩個用空格分開的整數 a 和 b,表示 a 喜歡 b 輸出格式 第一行 單獨乙個整數,表示...
洛谷P2341 HAOI2006 受歡迎的牛
每頭奶牛都夢想成為牛棚裡的明星。被所有奶牛喜歡的奶牛就是一頭明星奶牛。所有奶 歡b,b喜歡c,那麼a也喜歡c。牛欄裡共有n 頭奶牛,給定一些奶牛之間的愛慕關係,請你 算出有多少頭奶牛可以當明星。輸入格式 第一行 兩個用空格分開的整數 n和m 第二行到第m 1行 每行兩個用空格分開的整數 a和b,表示...