给一些牛的排名关系,问有多少牛的排名确定。
如果A比B强,就由A向B连边,之后求出这个图的传递闭包,对于一头牛,如果比它强的+比它弱的=N-1,它的排名一定。
View Code
1 program pku3660(input,output); 2 var 3 g : array[0..101,0..101] of boolean; 4 answer : longint; 5 n,m : longint; 6 procedure init; 7 var 8 i,x,y : longint; 9 begin 10 fillchar(g,sizeof(g),false); 11 readln(n,m); 12 for i:=1 to m do 13 begin 14 readln(x,y); 15 g[x,y]:=true; 16 end; 17 end; { init } 18 procedure floyd(); 19 var 20 i,j,k : longint; 21 begin 22 for k:=1 to n do 23 for i:=1 to n do 24 if (i<>k) then 25 for j:=1 to n do 26 if (k<>j)and(i<>j) then 27 g[i,j]:=g[i,j] or(g[i,k] and g[k,j]); 28 end; { floyd } 29 procedure main; 30 var 31 i,j : longint; 32 sum : longint; 33 begin 34 answer:=0; 35 for i:=1 to n do 36 begin 37 sum:=0; 38 for j:=1 to n do 39 if (i<>j) then 40 if (g[i,j])or(g[j,i]) then 41 inc(sum); 42 if sum=n-1 then 43 inc(answer); 44 end; 45 end; { main } 46 procedure print; 47 begin 48 writeln(answer); 49 end; { print } 50 begin 51 init; 52 floyd; 53 main; 54 print; 55 end.