最轻的天平

来源:互联网 发布:网络作家富豪榜 2016 编辑:程序博客网 时间:2024/05/01 18:13

题目描述

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


输入

第一行包含一个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为输入中描述左右比例时出现的最大。

样例输入

43 2 0 41 3 0 04 4 2 12 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
原创粉丝点击