pku3360 Cow Contest

牛排名算法解析
本文介绍了一种通过构建传递闭包图来确定每头牛在竞赛中的确切排名的方法。使用Floyd算法更新图中各节点之间的关系,最终统计出确定排名的牛的数量。

给一些牛的排名关系,问有多少牛的排名确定。

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



转载于:https://www.cnblogs.com/neverforget/archive/2012/03/15/2397725.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值