您的位置:首页 > 其它

UVA 839 - Not so Mobile

2017-09-03 18:05 363 查看
题目大意:输出n个天平树,判断是否平衡,重1*距1 == 重2*距2。

解题思路:递归输入,判断返回值知否为1。刚开始以为只要每个有重物的地方可以平衡就好了...然后wa了。看了小紫,补充了一个累积下面子树的参数。

ac代码:
#include <iostream>
using namespace std;

int dfs(int &w)
{
int left=1, right=1, a[4];
for (int i=0; i<4; i++)
scanf("%d", &a[i]);
if (a[0] == 0)
left = dfs(a[0]);
if (a[2] == 0)
right = dfs(a[2]);
w = a[2] + a[0];
if (right && left && a[0]*a[1] == a[2]*a[3])
return 1;
return 0;
}
int main()
{
int n, w;
scanf("%d", &n);
while (n--){
if (dfs(w))
printf("YES\n");
else
printf("NO\n");
if (n)
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: