原题: 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; }解答: 二叉树求和遍历,然后判断是否平衡即可。