UVa 839 - Not so Mobile
2014-05-01 10:12
323 查看
传送门UVa 839 - Not so Mobile
题意是计算是否所有的天平都是正的.
一开始想错了, 我把每一边看成一个结点, 这样一来读取输入的时候就成了大问题了.
参考了杨剑超的解题报告,
才忽然醒悟过来只要把一个天平看成一个结点就行.
那么剩下的就和一般的题目一样了, 建树的同时统计重量, 最后DFS判断是否平衡
详情见代码
题意是计算是否所有的天平都是正的.
一开始想错了, 我把每一边看成一个结点, 这样一来读取输入的时候就成了大问题了.
参考了杨剑超的解题报告,
才忽然醒悟过来只要把一个天平看成一个结点就行.
那么剩下的就和一般的题目一样了, 建树的同时统计重量, 最后DFS判断是否平衡
详情见代码
#include <cstdio> using namespace std; struct Node { int lw, ld, rw, rd; Node *left, *right; Node() { left = right = 0; } }; Node *Build(); bool Judge(Node *root); int main() { //freopen("input.txt", "r", stdin); int T; scanf("%d", &T); while (T--) { Node *root; root = Build(); bool result = Judge(root); if (result) printf("YES\n"); else printf("NO\n"); if (T) printf("\n"); } return 0; } Node *Build() { Node *root = new Node(); scanf("%d%d%d%d", &root->lw, &root->ld, &root->rw, &root->rd); if (root->lw == 0) //如果左边的重量是0, 说明有左子树 { root->left = Build(); root->lw += root->left->lw + root->left->rw; //同时计算重量 } if (root->rw == 0) //同理 { root->right = Build(); root->rw += root->right->lw + root->right->rw; } return root; } bool Judge(Node *root) { if (root) if (root->lw * root->ld != root->rw * root->rd) return false; else if (!Judge(root->left) || !Judge(root->right)) return false; return true; }
相关文章推荐
- 例题6-9UVA839 - Not so Mobile 递归访问二叉树
- uva 839 Not so Mobile
- UVA - 839 - Not so Mobile
- uva 839 not so mobile——yhx
- UVa 839 - Not so Mobile
- UVA 839 - Not so Mobile
- uva 839 not so mobile——yhx
- uva 839 Not so Mobile 天平问题
- uva 839 Not so Mobile
- UVA 839 Not so Mobile
- ACM篇:UVa 839 -- Not so Mobile
- uva 839 Not so Mobile
- UVA 839 Not so Mobile(二叉树|DFS)
- uva 839 Not so Mobile-S.B.S.
- uva 839 Not so Mobile
- uva 839 - Not so Mobile
- UVA839 - Not so Mobile
- uva 839 Not so Mobile(抽象意义上的建树)
- UVa 839 Not so Mobile (树的深度优先搜索)
- Not so Mobile UVA - 839