1051 HAOI2006 受歡迎的牛

2022-01-10 23:17:21 字數 3302 閱讀 1372

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

1

type

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...