這道就是明星奶牛,a了一次又一次了,(⊙o⊙)…(⊙o⊙)…
去年pas就打了不下5次,就是強聯通縮點,然後求出度為0的塊
判斷有多個的話就無解,乙個就輸出塊的大小。
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;78
const
int nn=1e4+7,mm=nn*5;9
10int n,m,time=0,top=0,scc=0
,ans;
11int
dfn[nn],low[nn],instack[nn],q[nn],belong[nn],chu[nn];
12int cnt=0
,head[nn],next[mm],rea[mm],skt[nn];
1314
void add(int u,int
v)15
21void tarjan(int
u)22
33else
if (instack[v]) low[u]=min(low[u],dfn[v]);34}
35if (low[u]==dfn[u])
3646}47
}48void
rebuild()
4957}58
int num=0,x=0;59
for (int i=1;i<=scc;i++)
60if (chu[i]==0) num++,x=i;
61if (num!=1) ans=0;62
else ans=skt[x];
63 printf("%d"
,ans);64}
65int
main()
6675
for (int i=1;i<=n;i++)
76if (dfn[i]==0
) tarjan(i);
77rebuild();
78 }
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受歡迎...