天平 Not so Mobile uva839

发布时间 2023-12-19 16:53:54作者: 黑屿白

原题链接

一道需要把题目理解透彻的题目。一开始,我也是对题目大意似懂非懂。

这里有一个注意点:当父天平一端的子天平平衡时,该父天平一端的weight应该为子天平重量(这将影响父天平平衡的比较!!)

其次,这道题目虽然是树的题目,但并不需要去构建数的结构,这也提醒我们,一道数据结构题目并不一定一定要用上对应数据结构的创建,我们要将目光更多的转向解题思维。

主要代码:

#include<bits/stdc++.h>
using namespace std;
bool process(int &w){
    int wl,wr,dl,dr;  //天平的力与力臂 
    bool b1=true,b2=true;  //判断一端是否平衡 
    cin>>wl>>dl>>wr>>dr;
    if (!wl) b1=process(wl);
    if (!wr) b2=process(wr);
    w=wl+wr;  //切记要将子天平的总重量返回 
    return b1 && b2 && (wl*dl==wr*dr);
}
int main(){
    int t,w=0;
    cin>>t;
    bool bol=true;
    while (t--){
        bol=process(w);
        if (bol) printf("YES\n");
        else printf("NO\n");
        if (t) cout<<endl;
    }
    return 0;
}

ps:别看代码简洁,但其中&w的使用和递归思想都是值得反复品味的