UVA 839 Not so Mobile

思路:

记得自己画个图。

 1 // 题意:输入一个树状天平,根据力矩相等原则判断是否平衡。采用递归方式输入,0表示中间结点
 2 // 算法:在“建树”时直接读入并判断,并且无须把树保存下来
 3 #include<iostream>
 4 using namespace std;
 5 /*
 6 先序输入
 7 如果输入 0 2 0 4
 8 cin>>W1>>D1>>W2>>D2
 9 w1=0说明此位置还是一个节点,两边没有砝码,
10 所以继续递归,直到w1!=0,两边是砝码,然后根据距离和砝码算是否平衡
11 每次递归引用w,不停修改,w就是此位置的砝码的总质量
12 */
13 // 输入一个子天平,返回子天平是否平衡,参数W修改为子天平的总重量
14 bool solve(int& W) {
15     int W1, D1, W2, D2;
16     bool b1 = true, b2 = true;
17     cin >> W1 >> D1 >> W2 >> D2;
18     if (!W1) b1 = solve(W1);
19     if (!W2) b2 = solve(W2);
20     W = W1 + W2;//修改此位置的砝码的总质量
21     return b1&&b2 && (W1*D1 == W2*D2);
22 }
23 
24 int main() {
25     int T, W;
26     cin >> T;
27     while (T--) {
28         if (solve(W)) cout << "YES\n"; else cout << "NO\n";
29         if (T) cout << "\n";
30     }
31     return 0;
32 }

 

posted @ 2019-03-14 23:05  付玬熙  阅读(158)  评论(0编辑  收藏  举报