// poj 1145 Tree Summing /* 交了好多遍才过,注意几点: 1.输入可能有负数;2.叶子节点判断要准确,是两个子节点都没有的节点;3.空树答案为no */ #include <iostream> using namespace std; const int inf = 1<<26; const int size = 10000; int n,m; int l[size+10],r[size+10]; int c; bool flag; int dfs(int sum) { char ch; int a,now; while (scanf("%c",&ch) && (ch==' ' || ch=='/n' || ch=='(')); if (ch==')') return -1; cin.putback(ch); scanf("%d",&a); l[now=++c]=dfs(sum+a); r[now]=dfs(sum+a); if (l[now]==-1 && r[now]==-1 && sum+a==n) flag=true; //判断子节点 while (scanf("%c",&ch) && ch!=')') ; return now; } int main() { while (scanf("%d",&n)!=EOF) { c=0;flag=false; dfs(0); if (!flag || !c) printf("no/n"); else printf("yes/n"); } system("pause"); return 0; }