bzoj 1051 受歡迎的牛 tarjan

2022-04-28 18:15:14 字數 890 閱讀 6412

如果a喜歡b,那麼a->b連邊,那麼整個圖儲存下來,如果有好多個牛是受歡迎的,那麼他們一定會在乙個環中,所以我們先跑一邊 tarjan縮點,那麼受歡迎的牛群所在的這個點(縮完),其出度為0。

所以縮完點後,統計一下每個強聯通分量中有多少個點,記錄每個點有多少出度,若會存在有兩個及以上出度為0的點,那麼表明圖不連通,則輸出0就好了。

#include #include 

#include

#include

#define maxn int(1e2+2)

#define n int(1e4+2)

#define m int(5e4+2)

using

namespace

std;

intn,m,ans[n],sum[n];

struct

ahahedge[m];

inthead[n],tot;

void add(int x,int

y)bool

in[n];

intdfn[n],low[n],indx;

intstack[n],top;

intbelong[n],cnt;

void tarjan(int

s)

else

if(in[v]&&low[s]>dfn[v])low[s]=dfn[v];

}if(dfn[s]==low[s])

while(p!=s);

}}int

main()

int p=0

;

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

p=i;}}

printf("%d

",ans[p]);

}

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 受歡迎的牛(tarjan)

1051 haoi2006 受歡迎的牛 time limit 10 sec memory limit 162 mb description 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這 種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎...