最轻的天平

题目描述

    天平的两边有时不一定只能挂物品,还可以继续挂着另一个天平,现在给你一些天平的情况和他们之间的连接关系,要求使得所有天平都能平衡所需物品的总重量最轻,一个天平平衡当且仅当“左端点的重量*左端点到支点的距离=右端点的重量*右端点到支点的距离”。注意题目中的输入保证这些天平构成一个整体。


输入

第一行包含一个N(N<=100),表示天平的数量,,天平编号为1到N,接下来包含N行描述天平的情况,每行4个整数P,Q,R,B,P和Q表示横杆上支点到左边的长度与到右边的距离的比例为P:Q,R表示左边悬挂的情况,如果R=0说明悬挂的物品,否则表示左边悬挂的是天平R;B表示右边的悬挂情况,如果B=0表示右边悬挂的是物品,否则右边悬挂着天平B。


对于所有的输入,保证W*L<2^31,   其中W为最请的天平重量,而L为输入中描述左右比例时出现的最大。

样例输入
4

3 2 0 4

1 3 0 0

4 4 2 1

2 2 0 0
样例输出
40

 
    
var a,b,c:longint;
        v:array[1..100,1..4]of longint;
        bz:array[0..100]of boolean;
function dg(x:longint):longint;
        var k,m,w,l,r:longint;
begin
        if x=0 then dg:=1 else begin
                k:=dg(v[x,3]);
                m:=dg(v[x,4]);
                l:=v[x,2]*m;
                w:=v[x,1]*k;
                r:=l mod w;
                while r>0 do begin
                        l:=w;
                        w:=r;
                        r:=l mod w;
                end;
                dg:=k*(m*v[x,2] div w)+m*(k*v[x,1] div w);
        end;
end;
begin
        readln(a);
        for b:=1 to a do begin
                readln(v[b,1],v[b,2],v[b,3],v[b,4]);
                bz[v[b,3]]:=true;
                bz[v[b,4]]:=true;
        end;
        for b:=1 to a do if bz[b]=false then begin
                c:=b;
                break;
        end;
        writeln(dg(c));
end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值