IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法竞赛入门经典 例题6-9 -> 正文阅读

[数据结构与算法]算法竞赛入门经典 例题6-9

UVa839

Not so Mobile

判断树形的杠杆是否平衡。

根据题目要求构建二叉树判断平衡即可。

#include <iostream>
#include <memory>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

struct Lever
{
	int W_l, D_l, W_r, D_r;
};

struct Node
{
	int weight, D_l, D_r;
	shared_ptr<Node> left, right;
};

class Solution
{
public:
	Solution(istream &is)
	{
		string line;
		while (getline(is, line)) {
			if (line.empty()) break;
			levers.push_back(Lever());
			stringstream ss(line);
			ss >> levers.back().W_l >> levers.back().D_l >> levers.back().W_r >> levers.back().D_r;
		}
		size_t index = 0;
		construct(tree, index);
	}
	bool equilibrium = true;
private:
	vector<Lever> levers;
	Node tree;
	void construct(Node &root, size_t &index)
	{
		const Lever &lever = levers.at(index++);
		root.D_l = lever.D_l, root.D_r = lever.D_r;
		if (lever.W_l == 0 && lever.W_r == 0) {
			root.left = make_shared<Node>();
			construct(*root.left, index);
			root.right = make_shared<Node>();
			construct(*root.right, index);
			root.weight = root.left->weight + root.right->weight;
			equilibrium &= root.left->weight * lever.D_l == root.right->weight * lever.D_r;
		}
		else if (lever.W_l != 0 && lever.W_r != 0) {
			root.weight = lever.W_l + lever.W_r;
			equilibrium &= lever.W_l * lever.D_l == lever.W_r * lever.D_r;
		}
		else if (lever.W_l != 0) {
			root.right = make_shared<Node>();
			construct(*root.right, index);
			root.weight = root.right->weight + lever.W_l;
			equilibrium &= lever.W_l * lever.D_l == root.right->weight * lever.D_r;
		}
		else {
			root.left = make_shared<Node>();
			construct(*root.left, index);
			root.weight = root.left->weight + lever.W_r;
			equilibrium &= root.left->weight * lever.D_l == lever.W_r * lever.D_r;
		}
	}
};

int main()
{
	int cases;
	cin >> cases;
	cin.get();
	cin.get();
	for (int c = 0; c < cases; c++)
	{
		if (c != 0) cout << endl;
		Solution solution(cin);
		if (solution.equilibrium) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}
/*
1

0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2
*/

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:28:58  更:2021-10-06 12:30:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 12:55:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码