uva 839 Not so Mobile

本文介绍了一种通过遍历二叉树结构的天平来判断其是否处于平衡状态的方法。利用深度优先搜索策略,计算每个子天平的总重量,并确保左右两边的力矩相等,以此来确定整个系统的均衡性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题:
Before being an ubiquous communications gadget, a mobile was just a structure made of strings and wires suspending colourfull things. This kind of mobile is usually found hanging
over cradles of small babies.The figure illustrates a simple mobile. It is just a wire,suspended by a string, with an object on each side. It can also be seen as a kind of lever with the fulcrum on the point where the string ties the wire. From the lever principle we know that to balance a simple mobile the product of the weight of the objects by their distance to the fulcrum must be equal. That is W l ×D l = W r ×D r where D l is the left distance,D r is the right distance, W l is the left weight and W r is the right weight.In a more complex mobile the object may be replaced by a sub-mobile, as shown in the next figure.In this case it is not so straightforward to check if the mobile is balanced so we need you to write a program that, given a description of a mobile as input, checks whether the mobile is in equilibrium or not.
这里写图片描述Input
The input begins with a single positive integer on a line by itself indicating the number
of the cases following, each of them as described below. This line is followed by a blank
line, and there is also a blank line between two consecutive inputs.
The input is composed of several lines, each containing 4 integers separated by a single space.
The 4 integers represent the distances of each object to the fulcrum and their weights, in the format:
W l D l W r D r
If W l or W r is zero then there is a sub-mobile hanging from that end and the following lines define the the sub-mobile. In this case we compute the weight of the sub-mobile as the sum of weights of all its objects, disregarding the weight of the wires and strings. If both W l and W r are zero then the following lines define two sub-mobiles: first the left then the right one.
Output
For each test case, the output must follow the description below. The outputs of two
consecutive cases will be separated by a blank line.
Write ‘YES’ if the mobile is in equilibrium, write ‘NO’ otherwise.
Sample Input
1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2
Sample Output
YES
中文:
给你一个树形的天平,让你判断是否这个树上所有的天平是否平衡。如果其中一个力臂为0,那表示这个力臂上的砝码是一个天平。
最后结果不要换行。

#include <bits/stdc++.h>
using namespace std;
int ans;

int dfs()
{
    int wl,dl,wr,dr;
    cin>>wl>>dl>>wr>>dr;
    if(!wl)
        wl=dfs();
    if(!wr)
        wr=dfs();
    if(wl*dl!=wr*dr)
        ans=false;
    return wl+wr;
}

int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    while(n--)
    {
        ans=true;
        dfs();
        if(ans)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
        if(n)
            cout<<endl;
    }
    return 0;
}

解答:
二叉树求和遍历,然后判断是否平衡即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值