一开始,自己题意貌似理解错误,物理太差了。
瞅了一眼紫书的源码,才明白自己原来写的有问题,忽略了对支点的考虑,而且也不需要开数组存整棵树。
紫书源码,精妙之处在于对每个节点质量更新的处理,使用了引用,更深处的递归的质量变化将会更新当前节点的质量。
AC代码(参看紫书)
#include <iostream>
using namespace std;
int solve(int& w)
{
int w1, d1, w2, d2;
cin >> w1 >> d1 >> w2 >> d2;
int f1 = 1, f2 = 1;
if (!w1)
f1 = solve(w1);
if (!w2)
f2 = solve(w2);
w = w1 + w2;
return f1 && f2 && (w1 * d1 == w2 * d2);
}
int main()
{
int T;
cin >> T;
while (T--)
{
int w = 0;
cout << (solve(w) ? "YES" : "NO") << endl;
if (T) cout << endl;
}
return 0;
}