tarjan BZOJ 1051 受歡迎的牛

2022-06-03 21:18:07 字數 1381 閱讀 3503

time limit: 10 sec  memory limit: 162 mb

submit: 3134  solved: 1642

[submit][status][discuss]

每一頭牛的願望就是變成一頭最受歡迎的牛。現在有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

1100%的資料n<=10000,m<=50000

很久之前做過的一道題目。。

具體就是先tarjan縮點,點的權值就是這個連通分量的點的數量

然後找入度為0的點

只有乙個就輸出它的權值

多個就輸0

1 #include2 #include3 #include4 #include5

6#define maxn 1000178

using

namespace

std;

910 inline int

in()

1117

18struct

ededge[maxn*5

];21

22struct

nodee[maxn*10

];25

26int last[maxn],tot=0,dfn[maxn],low[maxn],father[maxn],sta[maxn],top=0,cnt=0,size=0,num[maxn],in

[maxn];

2728

bool

ins[maxn];

2930

void add(int u,int v)

3132

void tarjan(int

poi)

3344

else

if(ins[u]) low[poi]=min(low[poi],dfn[u]);45}

46if(dfn[poi]==low[poi])

47while(vv!=poi);57}

58}5960

intmain()

6174

for(int i=1;i<=size;i++)

7577

if(!in[i])str=i;78}

79 printf("%d"

,num[str]);

80return0;

81 }

view code

BZOJ 1051, 受歡迎的牛

傳送門 求可以被除自己以外所有點遍歷到的點的個數。首先強連通分量跑一遍,縮點之後統計每個強連通分量 可以視為乙個點 的出度。如果有多個出度大於0,則無解 否則輸出唯一出度為0的強連通分量內點的個數。include const int n 10005,m 50005 int n,m,x,y,i,j,t...

bzoj1051 受歡迎的牛

每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第一行兩個數n,m。接下來m行,每行兩個數a,b,意思是a認為b...

BZOJ1051 HAOI2006受歡迎的牛

請原諒我,這題實在和bzoj1093太像 了,copy過來改一改,很多沒有用,然後一起嘿嘿嘿 include include include include include include include using namespace std typedef long long ll inline...