题目链接:
思路:
自底向上,依次判断各个子天平是否平衡,对于父天平,要判断是否平衡可以用子树的“等效重量”来计算(题目也已经给出了公式)
代码:
#include <iostream>
using namespace std;
bool solve(int &w) {
int w1, d1, w2, d2;
bool b1 = true, b2 = true; // 判断左右子树是否平衡的边浪
cin >> w1 >> d1 >> w2 >> d2;
if(w1 == 0) b1 = solve(w1); // 递归的计算w1的等效值
if(w2 == 0) b2 = solve(w2);
w = w1 + w2; // 当前子天平的等效重量
return b1 && b2 && (w1*d1 == w2*d2); // 子树和当前树都平衡
}
int main(){
int n; // 有n组数据
cin >> n;
int tmp = 0;
while(n--){
if(solve(tmp)) cout << "YES\n";
else cout << "NO\n";
if(n) cout << "\n"; // 题目格式要求
}
return 0;
};