Common Subexpression Elimination UVA
来源:互联网 发布:kbengine java 编辑:程序博客网 时间:2024/06/11 09:38
图论的一道简单的题目,在进行实现的时候既要记录每个节点的信息,包括该节点所指向的右子树的节点同时也包括左子树的节点位置,以及当前节点当中所包含的字符的信息,同时利用一个Map来进行查询以及去重,具体实现见如下代码:
#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>using namespace std;string express;class Node{public:int hash, left, right;string s;bool operator< (const Node a) const{if (hash != a.hash) return hash < a.hash;else if (left != a.left) return left < a.left;return right < a.right;}};Node node[50005];map<Node, int> dict;class Solve{public:int amount;int finish[50005];int cur;int parse(int& ind){int id;id = amount++;Node& temp=node[id];temp.left = temp.right = -1;temp.hash = 0;temp.s = "";while (ind < express.size() && isalpha(express[ind])){temp.hash = temp.hash * 27 + express[ind] - 'a' + 1;temp.s += express[ind];ind++;}if (express[ind] == '('){ind++;temp.left = parse(ind);ind++;temp.right = parse(ind);ind++;}if (dict.count(temp) != 0){id--;amount--;return dict[temp];}return dict[temp] = id;}void Print(int ind){if (finish[ind] == cur){cout << ind + 1;}else{finish[ind] = cur;cout << node[ind].s;if (node[ind].left != -1){cout << "(";Print(node[ind].left);cout << ",";Print(node[ind].right);cout << ")";}}}void Deal(){cur++;amount = 0;int ind = 0;int res=parse(ind);Print(res);cout << endl;}};int main(){int c;cin >> c;Solve a;a.cur = 0;memset(a.finish,0,sizeof(a.finish));while (c--){dict.clear();cin >> express;a.Deal();}}
阅读全文
0 0
- Common Subexpression Elimination UVA
- uva 12219 Common Subexpression Elimination
- UVA 12219 Common Subexpression Elimination(STL)
- UVA 12219 Common Subexpression Elimination(表达式树)
- uva12219 Common Subexpression Elimination
- UVa #12219 Common Subexpression Elimination (例题11-1)
- hash 表达式树 UVa 12219 Common Subexpression Elimination
- UVA 12219 Common Subexpression Elimination (dfs瞎搞)
- UVA 12219 Common Subexpression Elimination——map
- 12219 - Common Subexpression Elimination(表达式树)
- [hash 表达式树]UVa12219 - Common Subexpression Elimination
- Gym 100726B Common Subexpression Elimination
- codeforces100726B——Common Subexpression Elimination
- 【紫书】(UVa12219)Common Subexpression Elimination
- 判断相同的子树--uva12219 Common Subexpression Elimination
- Elimination
- uva-10252-Common Permutation
- UVa 10252 Common Permutation
- 什么是 XML?XML 的设计宗旨是用来传输和存储数据,其焦点是数据的内容。
- The Response of LTI systems to complex Exponential Signals
- 在嵌入式、海思、ARM中进行统一的音频AAC编码的必要性
- js Date对象的深入理解
- #define中宏定义中的空格
- Common Subexpression Elimination UVA
- java--正则表达式
- 取整函数的性质
- Python学习(十八)——list tuple namedtuple
- 对象的notify方法的含义和对象锁释放的三种情况
- Tomcat部署web项目,如何直接通过域名访问,不加项目名称
- Python 直接赋值、浅拷贝和深度拷贝解析
- 合并石子(求最小代价)
- JavaIOUtils