time limit: 10 sec memory limit: 162 mb
submit: 2410 solved: 1276
[submit][status]
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有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
1type
2 point=^node;
3 node=record
4g:longint;
5next:point;
6end;7
var8
i,j,k,l,m,n,h,t,ans:longint;
9 s,ss:array[0..100000] of
boolean;
10 a:array[0..100000] of
point;
11 c:array[0..100000,1..2] of
longint;
12 f,b,low,dfn,d,e:array[0..100000] of
longint;
13function
min(x,y:longint):longint;inline;
14begin
15if xthen min:=x else min:=y;
16end;17
procedure
add(x,y:longint);inline;
18var
p:point;
19begin
20new(p);
21 p^.g:=y;
22 p^.next:=a[x];
23 a[x]:=p;
24end;25
procedure
tarjan(x:longint);
26var
i,j,k:longint;p:point;
27begin
28inc(h);
29 low[x]:=h;dfn[x]:=h;
30inc(t);
31 ss[x]:=true;s[x]:=true;
32 f[t]:=x;
33 p:=a[x];
34while p<>nil
do35
begin
36if
not(s[p^.g]) then
37begin
38tarjan(p^.g);
39 low[x]:=min(low[x],low[p^.g]);
40end
41else
if ss[p^.g] then low[x]:=min(low[x],dfn[p^.g]);
42 p:=p^.next;
43end;44
if low[x]=dfn[x] then
45begin
46inc(ans);
47while f[t+1]<>x do
48begin
49 ss[f[t]]:=false;
50 b[f[t]]:=ans;
51dec(t);
52end;53
end;
54end;55
begin
56readln(n,m);
57 fillchar(s,sizeof(s),0
);58 fillchar(ss,sizeof(ss),0
);59 fillchar(b,sizeof(b),0
);60 fillchar(low,sizeof(low),0
);61 fillchar(dfn,sizeof(dfn),0
);62
for i:=1
to n do a[i]:=nil;63
for i:=1
to m do
64begin
65 readln(c[i,1],c[i,2
]);66 add(c[i,1],c[i,2
]);67
end;
68 tarjan(1
);69 fillchar(d,sizeof(d),0
);70 fillchar(e,sizeof(e),0
);71
for i:=1
to n do
inc(e[b[i]]);
72for i:=1
to m do
73if b[c[i,1]]<>b[c[i,2]] then inc(d[b[c[i,1]]]); //吐槽:這邊我第一遍交的時候寫的是inc(d[c[i,1]]),顯然這是乙個相當愚蠢的錯誤,可問題是居然還是ac了?!?!表示不解*_*(hansbug:我猜是phile神犇保佑了吧233)
74 j:=-1;75
for i:=1
to ans do
76begin
77if d[i]=0
then
78begin
79if j=-1
then j:=i else
80begin
81 writeln(0
);82
halt;
83end;84
end;
85end;86
if j=-1
then writeln(0) else
writeln(e[j]);
87readln;
88end
.89
BZOJ1051 HAOI2006受歡迎的牛
請原諒我,這題實在和bzoj1093太像 了,copy過來改一改,很多沒有用,然後一起嘿嘿嘿 include include include include include include include using namespace std typedef long long ll inline...
bzoj1051 HAOI2006 受歡迎的牛
bzoj1051 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第一行兩個數n,m。接下來m行,每行兩個數a,...
bzoj1051 HAOI2006 受歡迎的牛
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第一行兩個數n,m。接下來m行,每行兩個數a,b,意思是a認為b...